使用上一课中的代码,我们将在DrawGLScene ()方法中添加新的代码。我将在下面重写整个过程,因此,如果你想修改上节课的代码,你只需用下面的代码替换上节课的DrawGLScene() 函数中的代码就可以了,或者把下面代码中上节课没有的部分添加上就可以了。
int DrawGLScene(GLvoid)
//我们绘制图形的地方
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//清除颜色和深度缓存
glLoadIdentity();
//重置模型视图矩阵
glTranslatef(-1.5f,0.0f,-6.0f);
//向左移动1.5个单位,向屏幕里移动6.0个单位
glBegin(GL_TRIANGLES);
//使用
GL_TRIANGLES
参数绘制三角形
如果你还记得上节课的内容,下面这部分代码是在屏幕的左半边绘制三角形。下面的这行代码我们第一次使用,我们使用glColor3f(r,g,b)函数。括号里的三个参数分别是红色,绿色和蓝色的强度值。取值范围为0.0f到1.0f。它们和我们用来清除屏幕背景的颜色值的效果是一样的。
我们设置颜色为红色(全红,无绿色,无蓝色)。这行代码的这下方是第一个顶点(三角形的上顶点),会使用红颜色来绘制。从现在开始我们绘制的任何对象都将使用红色,直到我们改变颜色。
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);
//左下顶点
然后我们绘制第三个也是最后一个顶点。在我们绘制之前,把颜色值改为蓝色。它是三角形的右下顶点。glEnd()函数执行之后,多边形将被填充。因为每个顶点的颜色不同,和只有一种固定颜色相比,颜色将会从每一个顶点扩散开来,然后杂中心汇合,所有的颜色混合在一起。这就是平滑着色。
glColor3f(0.0f,0.0f,1.0f);
//设置颜色为蓝色
glVertex3f( 1.0f,-1.0f, 0.0f);
// 右下顶点
glEnd();
//绘制三角形完成
glTranslatef(3.0f,0.0f,0.0f);
//向右移动三个单位
然后,我们绘制一个蓝色的正方形。当颜色设置之后,所有绘制的对象都将使用这种颜色,记住这点很重要。在这种情况下,你所绘制的每一个对象都会以一种方式来使用着色。即使场景中的每一个物体都是纹理映射,
函数也可以用来调节纹理的色调,等等。以后再详细说明。glColor3f
为了只使用一种颜色来绘制我们的正方形,我们要做的就是使用一种我们喜欢的颜色来仅设置一次颜色,然后绘制正方形。
我们将使用蓝色来绘制正方形的每个顶点,因为我们没让OpenGL在每个顶点改变颜色。最后的结果,一个实心的蓝色正方形。再强调一次,我们使用顺时针来绘制正方形,意味着,正方形的背面朝向我们。
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();
//正方形绘制完成
return
TRUE;
//返回
}
最后,修改一下切换窗口\全屏模式部分的代码,以便于窗口有一个合适的标题。
if
(keys[VK_F1])
//如果F1被按下
{
keys[VK_F1]=FALSE;
//设置为FALSE
KillGLWindow();
//销毁当前的窗口
fullscreen=!fullscreen;
//切换全屏/窗口模式
// Recreate Our OpenGL Window ( 修改的部分)
if
(!CreateGLWindow(
"
NeHe's Color Tutorial
",640,480,16,fullscreen))
{
return
0;
//如果窗口创建失败,程序退出
}
}