繪制三角形大概的操作流程
- 初始化opengl可視化編程庫glut
- 窗口大小改變時,設(shè)置視口大小
- 視口環(huán)境的搭建
- 然后調(diào)用SetupRC初始化渲染環(huán)境進(jìn)行三角形渲染,這里用的是存儲著色器
- 期間glut會一直在內(nèi)部做一個消息的循環(huán),對相應(yīng)的響應(yīng)做出回調(diào)
對繪制三角形用到的代碼的一些解釋
GLBatch triangleBatch;
GLShaderManager shaderManager;
void ChangeSize(int w, int h)
{
//窗口改變時,可視窗口也變化,這里的可視窗口和物理窗口一樣大
glViewport(0, 0, w, h);
}
void SetupRC()
{
//設(shè)置窗口清理的顏色
glClearColor(0.0f, 0.0f, 1.0f, 1.0f );
shaderManager.InitializeStockShaders();
//設(shè)置三角形的笛卡爾坐標(biāo)
GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f };
//gltools的存儲容器類,以供著色器渲染時使用
triangleBatch.Begin(GL_TRIANGLES, 3);//設(shè)置哪種圖元,和頂點(diǎn)數(shù)
triangleBatch.CopyVertexData3f(vVerts);//設(shè)置頂點(diǎn)坐標(biāo)
triangleBatch.End();//結(jié)束存儲標(biāo)志
}
void RenderScene(void)
{
//清理緩沖區(qū)顏色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
//設(shè)置一個紅色的顏色屬性
GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
//使用存儲的單位著色器進(jìn)行渲染
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
//開始渲染
triangleBatch.Draw();
//由于用的雙緩沖區(qū)渲染,需要在后臺緩沖區(qū)渲染好的結(jié)果交換到前臺緩沖區(qū)這時候上回的前臺緩沖區(qū)就有在后臺進(jìn)行渲染以此類推,這個函數(shù)做的就是交換緩沖區(qū)的作用
glutSwapBuffers();
}
int main(int argc, char* argv[])
{
//指定工作目錄,將當(dāng)前文件夾設(shè)為應(yīng)用程序捆綁包Resource文件夾
gltSetWorkingDirectory(argv[0]);
glutInit(&argc, argv);
//創(chuàng)建窗口使用的顯示模式
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
//指定窗口大小
glutInitWindowSize(800, 600);
//設(shè)置窗口名
glutCreateWindow("Triangle");
//窗口改變時會回調(diào),第一次出現(xiàn)窗口也視為改變了一次窗口大小
glutReshapeFunc(ChangeSize);
//展示窗口時的回調(diào),這時調(diào)用了視口環(huán)境的搭建
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
//初始化渲染環(huán)境的函數(shù)
SetupRC();
//主消息循環(huán),對于調(diào)用方法glut是一個內(nèi)部消息不斷循環(huán)的一個機(jī)制,當(dāng)有消息被攔截時,也就是當(dāng)某個響應(yīng)觸發(fā)時,就會通過響應(yīng)函數(shù)傳遞消息
glutMainLoop();
return 0;
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。