Qt5版NeHe OpenGL教程之二:添加顏色
與教程一相比,只需要在render函數(shù)中添加設(shè)置顏色的語(yǔ)句: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());?//?重置當(dāng)前視口 ????glMatrixMode(GL_PROJECTION);????????????????????//?選擇投影矩陣 ????glLoadIdentity();???????????????????????????????//?重置投影矩陣為單位矩陣 ????//?glu庫(kù)函數(shù)Qt不支持,但是glu庫(kù)函數(shù)是對(duì)gl庫(kù)函數(shù)的封裝,方便使用。因此我們可以自己 ????//?寫(xiě)一個(gè)類(lèi)似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è)置當(dāng)前色為紅色 ????glVertex3f(?0.0f,?1.0f,?0.0f); //?上頂點(diǎn) ????glColor3f(0.0f,1.0f,0.0f); //?設(shè)置當(dāng)前色為綠色 ????glVertex3f(-1.0f,-1.0f,?0.0f); //?左下 ????glColor3f(0.0f,0.0f,1.0f); //?設(shè)置當(dāng)前色為藍(lán)色 ????glVertex3f(?1.0f,-1.0f,?0.0f); //?右下 ????glEnd();????????????????????????//?三角形繪制結(jié)束 ????glTranslatef(3.0f,0.0f,0.0f);???//?在左移1.5單位的基礎(chǔ)上右移3.0單位,相當(dāng)于右移了1.5單位,z坐標(biāo)值沿用前面的6.0 ????glColor3f(0.5f,0.5f,1.0f); ????//?一次性將當(dāng)前色設(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é)束 }
運(yùn)行效果
三角形之所以是彩色的,是因?yàn)閕nitialize函數(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);??????????????//?啟用深度測(cè)試 ????glDepthFunc(GL_LEQUAL);???????????????//?深度測(cè)試類(lèi)型 ????//?接著告訴OpenGL我們希望進(jìn)行最好的透視修正。這會(huì)十分輕微的影響性能。但使得透視圖看起來(lái)好一點(diǎn)。 ????glHint(GL_PERSPECTIVE_CORRECTION_HINT,?GL_NICEST); }
如果將作色模式設(shè)置為glShadeModel(GL_FLAT); 三角形就變成了藍(lán)色,即三角形最后一個(gè)頂點(diǎn)的顏色。
源碼中用到的OpenGL庫(kù)函數(shù)可以參考:
OpenGL之glShadeModel函數(shù)的用法