與教程一相比,只需要在render函數(shù)中添加設(shè)置顏色的語句:void glColor3f(GLfloat red, GLfloat green, GLfloat blue);
void?Lesson2::render()
{
????glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
????glViewport(0,0,(GLint)width(),(GLint)height());?//?重置當前視口
????glMatrixMode(GL_PROJECTION);????????????????????//?選擇投影矩陣
????glLoadIdentity();???????????????????????????????//?重置投影矩陣為單位矩陣
????//?glu庫函數(shù)Qt不支持,但是glu庫函數(shù)是對gl庫函數(shù)的封裝,方便使用。因此我們可以自己
????//?寫一個類似gluPerspective的函數(shù)myPerspective,用于設(shè)置透視。
????//gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
????myPerspective(45.0,(GLfloat)width()/(GLfloat)height(),0.1,100.0);
????glMatrixMode(GL_MODELVIEW);//?選擇模型視圖矩陣
????glLoadIdentity();??????????//?重置模型視圖矩陣為單位矩陣
????glTranslatef(-1.5f,0.0f,-6.0f);?//?左移1.5單位,并移入屏幕6.0
????glBegin(GL_TRIANGLES); //?繪制三角形
????glColor3f(1.0f,0.0f,0.0f); //?設(shè)置當前色為紅色
????glVertex3f(?0.0f,?1.0f,?0.0f); //?上頂點
????glColor3f(0.0f,1.0f,0.0f); //?設(shè)置當前色為綠色
????glVertex3f(-1.0f,-1.0f,?0.0f); //?左下
????glColor3f(0.0f,0.0f,1.0f); //?設(shè)置當前色為藍色
????glVertex3f(?1.0f,-1.0f,?0.0f); //?右下
????glEnd();????????????????????????//?三角形繪制結(jié)束
????glTranslatef(3.0f,0.0f,0.0f);???//?在左移1.5單位的基礎(chǔ)上右移3.0單位,相當于右移了1.5單位,z坐標值沿用前面的6.0
????glColor3f(0.5f,0.5f,1.0f); ????//?一次性將當前色設(shè)置為紫色
????glBegin(GL_QUADS); //?繪制正方形
????glVertex3f(-1.0f,?1.0f,?0.0f); //?左上
????glVertex3f(?1.0f,?1.0f,?0.0f); //?右上
????glVertex3f(?1.0f,-1.0f,?0.0f); //?左下
????glVertex3f(-1.0f,-1.0f,?0.0f); //?右下
????glEnd(); ????//?正方形繪制結(jié)束
}運行效果
三角形之所以是彩色的,是因為initialize函數(shù)里將作色模式設(shè)置為了平滑作色:glShadeModel(GL_SMOOTH); ?
void?Lesson2::initialize()
{
????glShadeModel(GL_SMOOTH);??????????????//?啟用平滑著色
????glClearColor(0.0f,?0.0f,?0.0f,?0.0f);?//?黑色背景
????glClearDepth(1.0f);???????????????????//?設(shè)置深度緩存
????glEnable(GL_DEPTH_TEST);??????????????//?啟用深度測試
????glDepthFunc(GL_LEQUAL);???????????????//?深度測試類型
????//?接著告訴OpenGL我們希望進行最好的透視修正。這會十分輕微的影響性能。但使得透視圖看起來好一點。
????glHint(GL_PERSPECTIVE_CORRECTION_HINT,?GL_NICEST);
}如果將作色模式設(shè)置為glShadeModel(GL_FLAT); 三角形就變成了藍色,即三角形最后一個頂點的顏色。
源碼中用到的OpenGL庫函數(shù)可以參考:
OpenGL之glShadeModel函數(shù)的用法





