首先,我們需要搭建一個基本的窗口
1. 初始化glut模塊
glutInit(&argc, argv);
2. 加載配置模塊
? 需要加載的有
GLUT_DOUBLE 雙緩沖窗口
GLUT_RGBA RGBA顏色模式(后面嘗試一下能否家在HSV顏色模式)
GLUT_DEPTH 深度測試模塊
-
GLUT_STENCIL 模版緩沖區(qū)
/** * GLUT_DOUBLE 雙緩沖窗口 是指繪圖命令實際上是離屏緩存區(qū)執(zhí)行的,然后迅速轉換成窗口視圖,這種方式經常用來生成動畫效果 * GLUT_RGBA RGBA顏色模式 RGBA通道,R G B A 的范圍分別為 0-1 * GLUT_DEPTH 深度測試 標志將一個深度緩存區(qū)分配為顯示的一部分,因此我們能夠執(zhí)行深度測試 * GLUT_STENCIL 模版緩沖區(qū) 確保有一個可用的模版緩沖區(qū) */ glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
3.設置窗口大小 (后面的視口大小盡量與視圖大小一致)
glutInitWindowSize(600, 400);
4.給這個窗口取個名字并創(chuàng)建這個窗口
glutCreateWindow("Triangle");
5.設置一個方法,用于捕獲窗口改變時的消息
/**
* @param w 捕獲到的寬度
* @param h 捕獲到的的高度
*/
void ChangeSize(int w, int h)
{
}
glutReshapeFunc(ChangeSize);
6.注冊一個方法,用于設置顯示的內容(屏幕刷新的時候)
void RenderScene(void)
{
}
glutDisplayFunc(RenderScene);
7.初始化GLEW庫,并檢查驅動初始化過程中是否出現(xiàn)問題,以確保OpenGL API是完整的,可用的
GLenum status = glewInit();
if (status != GLEW_OK) {
printf("GLEW Occur an error: %s \n", glewGetErrorString(status));
return 1;
}
8.設置渲染環(huán)境(準備工作)
void SetupRC()
{
}
SetupRC();
9.加載并啟動MainLoop配置
glutMainLoop();
至此,基本窗口就搭建完畢了,接下來開始寫窗口內的內容
接下來,配置一下窗口大小發(fā)生變化時的操作
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h)
}
當初始化窗口或拉動窗口邊界改變窗口大小時,將窗口大小改變?yōu)槌跏蓟拇笮』蚶瓌拥降拇笮?,如果不設置這一步的話,
然后進行繪制的準備
-
設置畫板的背景顏色
//設置成了水藍色 glClearColor(212/255.0, 242/255.0, 231/255.0, 1); -
創(chuàng)建一個全局的著色器,用來繪制圖案,并初始化
GLShaderManager shaderManager; shaderManager.InitializeStockShaders() -
設置圖形頂點數(shù)據(jù)
GLfloat vTops[] = { -0.4, -0.3, 0, 0.6, -0.7, 0, 0.2, 0.5, 0 }; -
創(chuàng)建一個全局容器,用來描繪路徑
GLBatch triangleBatch; -
設置繪制方式與繪制頂點個數(shù),并將頂點數(shù)據(jù)拷貝進容器內
/** * GL_TRIANGLES 三角形 */ triangleBatch.Begin(GL_TRIANGLES, 3); triangleBatch.CopyVertexData3f(vTops); -
發(fā)送準備結束的信號,進入繪圖階段
triangleBatch.End();
最后開始畫圖
-
清空緩沖區(qū)(可能保留有之前的狀態(tài),需要清空)
/** * GL_COLOR_BUFFER_BIT 顏色緩沖區(qū) * GL_DEPTH_BUFFER_BIT 深度緩沖區(qū) * GL_STENCIL_BUFFER_BIT 模版緩沖區(qū) */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ); -
選中著色器(就像ps那樣),并著色器的屬性(主要是設置顏色)
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vPencil); -
調用開始繪制的命令,并切換顯示器的緩沖區(qū)(現(xiàn)在一般的顯示器都是雙緩沖區(qū),在顯示的時候會進行新的繪制,繪制完畢后會顯示這次的繪制,并切換緩沖區(qū)并進行新的繪制)
triangleBatch.Draw(); glutSwapBuffers(); 這個時候,三角形就出現(xiàn)在屏幕上啦 ???????? Nice Job~

Triangle.png