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多边形中.你可以尝试换成红绿蓝的颜色值.

  • 相关阅读:
    iOS开发——高级篇——iOS中常见的设计模式(MVC/单例/委托/观察者)
    object_getClassName swift得到类名
    UIGestureRecognizerDelegate设置响应事件优先级
    String to Double in swift
    Unable to boot device in current state:Booted
    xcode Indexing | Loading index...
    swift String to UTF8编码
    进入沙盒目录
    swift objective-c混编操作
    storyboard plain style unsupported in a navigation item
  • 原文地址:https://www.cnblogs.com/live41/p/3454399.html
Copyright © 2011-2022 走看看