0
点赞
收藏
分享

微信扫一扫

Qt5版NeHe OpenGL教程之二:添加颜色


与教程一相比,只需要在render函数中添加设置颜色的语句: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库函数Qt不支持,但是glu库函数是对gl库函数的封装,方便使用。因此我们可以自己
// 写一个类似gluPerspective的函数myPerspective,用于设置透视。
//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); // 设置当前色为红色
glVertex3f( 0.0f, 1.0f, 0.0f); // 上顶点
glColor3f(0.0f,1.0f,0.0f); // 设置当前色为绿色
glVertex3f(-1.0f,-1.0f, 0.0f); // 左下
glColor3f(0.0f,0.0f,1.0f); // 设置当前色为蓝色
glVertex3f( 1.0f,-1.0f, 0.0f); // 右下
glEnd(); // 三角形绘制结束
glTranslatef(3.0f,0.0f,0.0f); // 在左移1.5单位的基础上右移3.0单位,相当于右移了1.5单位,z坐标值沿用前面的6.0
glColor3f(0.5f,0.5f,1.0f); // 一次性将当前色设置为紫色
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(); // 正方形绘制结束
}

运行效果

Qt5版NeHe OpenGL教程之二:添加颜色_NeHe

三角形之所以是彩色的,是因为initialize函数里将作色模式设置为了平滑作色:glShadeModel(GL_SMOOTH);  

void Lesson2::initialize()
{
glShadeModel(GL_SMOOTH); // 启用平滑着色
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 黑色背景
glClearDepth(1.0f); // 设置深度缓存
glEnable(GL_DEPTH_TEST); // 启用深度测试
glDepthFunc(GL_LEQUAL); // 深度测试类型
// 接着告诉OpenGL我们希望进行最好的透视修正。这会十分轻微的影响性能。但使得透视图看起来好一点。
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

如果将作色模式设置为glShadeModel(GL_FLAT); 三角形就变成了蓝色,即三角形最后一个顶点的颜色。

Qt5版NeHe OpenGL教程之二:添加颜色_NeHe_02

源码中用到的OpenGL库函数可以参考:

OpenGL之glShadeModel函数的用法


举报

相关推荐

0 条评论