zoukankan      html  css  js  c++  java
  • [译]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多边形中.你可以尝试换成红绿蓝的颜色值.

  • 相关阅读:
    如何在Ubuntu Server 18.04上安装Microsoft的Procmon
    如何在Ubuntu 20.04上安装Wine 5.0
    如何在Kali Linux 2020中启用SSH服务
    如何在Ubuntu 20.04 LTS Focal Fossa上安装Apache Groovy
    如何使用命令在Ubuntu 20.04 Linux上安装Vmware Tools
    在Ubuntu 20.04 LTS Focal Fossa上安装Zabbix Agent
    hdu 2089 不要62
    hdu 2093 成绩排名
    hdu 2104 hide handkerchief
    leetcode147对链表进行插入排序
  • 原文地址:https://www.cnblogs.com/live41/p/3454399.html
Copyright © 2011-2022 走看看