[译]NeHe教程 - 添加颜色

原文: Adding Colour

 

上一节我讲解了如何在屏幕显示三角形和四边形.本节会讲解如何上色.单色(Flat)顾名思义就是只能涂一种实心的颜色.平滑颜色(Smooth)可以在各个顶点混合三种颜色,生成各种颜色.

利用上一节的代码,我们会添加代码到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);          // Right And Down One Unit (Bottom Right)
glEnd();                        // Done Drawing 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 1 Unit (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 Down One Unit (Bottom Right)
        glVertex3f(-1.0f,-1.0f, 0.0f);          // Left And Down One 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 Make Key FALSE
    KillGLWindow();         // Kill Our Current Window
    fullscreen=!fullscreen;     // Toggle Fullscreen / Windowed Mode
    // Recreate Our OpenGL Window ( Modified )
    if (!CreateGLWindow("NeHe's Color Tutorial",640,480,16,fullscreen))
    {
        return 0;       // Quit If Window Was Not Created
    }
}

 

本节讲解了增加平滑颜色到OpenGL多边形中.你可以尝试换成红绿蓝的颜色值.

 

posted @ 2013-12-02 17:37  Clotho_Lee  阅读(356)  评论(0编辑  收藏  举报