现在的位置: 首页 > 综合 > 正文

NEHE的OpenGL-Lesson 03 Colors

2013年12月05日 ⁄ 综合 ⁄ 共 3558字 ⁄ 字号 评论关闭

Lesson 03 Colors
 
在上一篇教程中你已经学会了如何绘制三角形和四边形。 在这一篇教程中,我将会教给你如何增加两种不同类型的着色到三角形和四边形上。 单调上色会使四边形着色为纯色,而平滑上色会混合三角形三个顶点的三种颜色, 形成漂亮的混合色彩。
 
使用上一篇的代码, 我们将添加新的内容到DrawGLScene 中。 下面列出了它的完整内容,你可以用它替换掉上一篇教程中的DrawGLScene,也可以直接修改上一篇的DrawGLScene。
 
int DrawGLScene(GLvoid)                                      // Here's Where We Do All The Drawing
{
       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);       // Clear The Screen And The Depth Buffer
       glLoadIdentity();                                            // Reset The Current Modelview Matrix
 
       glTranslatef(-1.5f,0.0f,-6.0f);                          // Left 1.5 Then Into Screen Six Units
 
       glBegin(GL_TRIANGLES);                                // Begin Drawing Triangles
 
 
如果你记得, 上面这是上一篇教程中绘制三角形的代码段。下面的代码中, 我们将第一次使用glColor3f(r,g,b) 函数。 它的三个参数分别是红色,绿色 和 蓝色 的亮度值, 值的范围是 0.0f 到 1.0f。这与第一篇教程中指定清除屏幕色的函数的参数范围是一样的。
 
我们将当前颜色设置为红色(红色亮度满,没有绿和蓝)。 接下来的代码是第一个顶点(三角形上面的), 我们将以红色作为当前颜色来进行绘制。 从现在开始如果我们不改变当前颜色,那么绘制什么都将是红色的。
 
              glColor3f(1.0f,0.0f,0.0f);                          // Set The Color To Red
              glVertex3f( 0.0f, 1.0f, 0.0f);                     // Move Up One Unit From Center (Top Point)
 
 
现在我们已经放置了一个顶点, 并且指定为了红色。在我们绘制第二个顶点之前, 我们要改变当前颜色为绿色, 这就指定了三角形左边的顶点为绿色。
 
              glColor3f(0.0f,1.0f,0.0f);                          //Set The Color To Green
              glVertex3f(-1.0f,-1.0f,0.0f);                    // Left And Down One Unit (Bottom Left)
 
 
现在到了最后一个顶点。 在绘制其之前, 我们将当前颜色设置为蓝色,这是三角形右下角的顶点颜色。 在glEnd()函数完成之时,三角形将被填充。 但由于三角形每个顶点的颜色都不同, 并不是单纯的色彩,那么这些颜色将从各点出发, 在三角形中心汇合并混合到一起。 这就是平滑着色。
 
              glColor3f(0.0f,0.0f,1.0f);                          // Set The Color To Blue
              glVertex3f( 1.0f,-1.0f, 0.0f);                     // RightAnd Down One Unit (Bottom Right)
       glEnd();                                                          // DoneDrawing A Triangle
 
       glTranslatef(3.0f,0.0f,0.0f);                      // From Right Point Move 3 Units Right
 
 
下面我们将绘制一个纯蓝色的四边形。 有一点很重要, 就是设置了当前颜色之后绘制的所有物体都将使用这个颜色,即使在使用纹理影射的时候, glColor3f 仍然可以用来调节纹理的色调, 等等。以后再详细说。
 
所以要绘制一个纯色的四边形, 我们要做的就是仅设置一个我们喜欢的颜色(例如蓝色)一次,然后绘制四边形。 那么四边形的每一个顶点都将是蓝色, 因为我们并没有在绘制每一个顶点的时候改变颜色。最终结果……一个蓝色的四边形。 我再说一次, 以顺时针顺序绘制的四边形将以背面面向我们。
 
       glColor3f(0.5f,0.5f,1.0f);                                 // Set The Color To Blue One Time Only
       glBegin(GL_QUADS);                                      // Start Drawing Quads
              glVertex3f(-1.0f, 1.0f, 0.0f);                     // Left And Up 1Unit (Top Left)
              glVertex3f(1.0f, 1.0f, 0.0f);                     // Right And Up 1 Unit (Top Right)
              glVertex3f(1.0f,-1.0f,0.0f);                     // Right And DownOne Unit (Bottom Right)
              glVertex3f(-1.0f,-1.0f,0.0f);                    // Left And DownOne Unit (Bottom Left)
       glEnd();                                            //Done Drawing A Quad
       return TRUE;                                    // Keep Going
}
 
 
最后我们改一下窗口的标题。
 
                     if (keys[VK_F1])                        // Is F1 Being Pressed?
                     {
                            keys[VK_F1]=FALSE;          // If So MakeKey FALSE
                            KillGLWindow();                  //Kill Our Current Window
                            fullscreen=!fullscreen;              // Toggle Fullscreen / Windowed Mode
                            // Recreate Our OpenGL Window ( Modified )
                            if (!CreateGLWindow("NeHe's ColorTutorial",640,480,16,fullscreen))
                            {
                                   return 0;                            // Quit If Window Was Not Created
                            }
                     }
 
 
在这一篇教程中我尽量做了详细的解释, 怎样给你的 OpenGL 多边形添加纯色或者是平滑色。 试着修改一下代码中的红色,绿色和蓝色参数, 看看会有什么样的结果。如果你有什么意见或者问题请给我写 email。 如果你发现有什么不正确的地方或者是你有更好的办法, 请告诉我,我想尽我可能地做最好的 OpenGL 教程,而且我有兴趣听取你的反馈。
 
Jeff Molofee (NeHe)

抱歉!评论已关闭.