opengl超級寶典(第五版)閱讀筆記 1 基本程式框架
阿新 • • 發佈:2019-01-01
配置環境部分其實還是有點煩,網上資料有很多,耐心點問題也不大。
下面也算是opengl的hello world了,寫了比較詳細的註釋。
值得注意的是#pragma comment(lib,“gltools.lib”)這一行,書中是沒有的,可能因為環境配置方法的不同,我必須要手動連結一下gltools庫,不然會出現連結錯誤。
#include <GLTools.h> // OpenGL toolkit
#include <GLShaderManager.h>
#define FREEGLUT_STATIC //在windows和linux上,使用freeglut靜態版本,需要新增這一行,否則會出現錯誤
#include <glut.h>
#pragma comment(lib,"gltools.lib")//要加上這一行連結一下gltools庫
GLBatch triangleBatch;//用其來繪製基本圖元
GLShaderManager shaderManager;//著色器管理器
void ChangeSize(int w,int h)
{
glViewport(0, 0, w , h);//設定視口大小為視窗大小
}
void SetupRC()
{
glClearColor(0.0f,0.0f,1.0f,1.0f);//設定其背景為藍色
shaderManager.InitializeStockShaders (); //初始化著色器管理器
GLfloat vVerts[] = { -0.5f , 0.0f , 0.0f,
0.5f , 0.0f , 0.0f,
0.0f , 0.5f , 0.0f };//設定三角形三個頂點的座標
//建立三角形模型
triangleBatch.Begin(GL_TRIANGLES,3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
void RenderScene(void)
{
// 用之前設定好的背景色來填充背景
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);//顏色緩衝區,深度緩衝區,模板緩衝區
GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };//紅色
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);//使用GLTshader和紅色填充三角形
triangleBatch.Draw();//繪製三角形
// 交換緩衝,防止閃爍
glutSwapBuffers();
}
int main(int argc, char* argv[])
{
gltSetWorkingDirectory(argv[0]);//設定當前的工作目錄,windows環境下也可省略
glutInit(&argc, argv);//傳輸命令列引數,並初始化glut庫
//設定顯示模式 雙緩衝 RGBA顏色格式 深度緩衝區 模板緩衝區(不大理解,後面可能會講到這種具體的問題)
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(800, 600); //設定視窗的大小
glutCreateWindow("Triangle"); //設定視窗的標題
glutReshapeFunc(ChangeSize); //註冊函式,當視窗大小改變的時候設定視點
glutDisplayFunc(RenderScene); //註冊渲染場景使用的函式
GLenum err = glewInit(); //初始化glew
if (GLEW_OK != err)
{
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err)); //出現錯誤然後列印錯誤
return 1; //return 1代表程式非正常終止
}
SetupRC(); //開始渲染環境
glutMainLoop(); //執行主視窗
return 0;
}