Jeff Molofee(NeHe)的OpenGL教程--着色

原 文 Lesson 3: Colors
译 者CKER

  上一课中我教给您三角形和四边形的绘制方法。这一课我将教您给三角形和四边形添加2种不同类型的着色方法。使用单调着色(Flat coloring)给四边形涂上固定的一种颜色。使用平滑着色(Smooth coloring )将三角形的三个顶点的不同颜色混合在一起,创建漂亮的色彩混合。
  继续在上节课的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);               // 绘制三角形

  如果您还记得上节课的内容,这段代码在屏幕的左半部分绘制三角形。下一行代码是我们第一次使用命令glColor 3f (r,g,b)。括号中的三个参数依次是红、绿、蓝三色分量。取值范围可以从0, 0f 1.0f 。类似于以前所讲的清除屏幕背景命令。
  我们将颜色设为红色(纯红色,无绿色,无蓝色)。接下来的一行代码设置三角形的第一个顶点(三角形的上顶点),并使用当前颜色(红色)来绘制。从现在开始所有的绘制的对象的颜色都是红色,直到我们将红色改变成别的什么颜色。

      
    glColor 3f ( 1.0f , 0.0f , 0.0f );         // 设置当前色为红色
          glVertex 3f ( 0.0f , 1.0f , 0.0f );       // 上顶点

  第一个红色顶点已经设置完毕。接下来我们设置第二个绿色顶点。三角形的左下顶点被设为绿色。

          
glColor 3f ( 0.0f , 1.0f , 0.0f );         // 设置当前色为绿色
          glVertex 3f (- 1.0f ,- 1.0f , 0.0f );       // 左下

  现在设置第三个也就是最后一个顶点。开始绘制之前将颜色设为蓝色。这将是三角形的右下顶点。glEnd()出现后,三角形将被填充。但是因为每个顶点有不同的颜色,因此看起来颜色从每个角喷出,并刚好在三角形的中心汇合,三种颜色相互混合。这就是平滑着色。

          
glColor 3f ( 0.0f , 0.0f , 1.0f );        // 设置当前色为蓝色
          glVertex 3f ( 1.0f ,- 1.0f , 0.0f );      // 右下
      glEnd();                     // 三角形绘制结束

      glTranslatef( 3.0f , 0.0f , 0.0f );           // 右移3单位

  现在我们绘制一个单调着色-蓝色的正方形。最重要的是要记住,设置当前色之后绘制的所有东东都是当前色的。以后您所创建的每个工程都要使用颜色。即便是在完全采用纹理贴图的时候,glColor 3f 仍旧可以用来调节纹理的色调。等等....,以后再说吧。
  我们必须要做的事只需将颜色一次性的设为我们想采用的颜色(本例采用蓝色),然后绘制场景。每个顶点都是蓝色的,因为我们没有告诉OpenGL要改变顶点的颜色。最后的结果是.....全蓝色的正方形。再说一遍,顺时针绘制的正方形意味着我们所看见的是四边形的背面。

      
glColor 3f ( 0.5f , 0.5f , 1.0f );           // 一次性将当前色设置为蓝色
      glBegin(GL_QUADS);               // 绘制正方形
          glVertex 3f (- 1.0f , 1.0f , 0.0f );     // 左上
          glVertex 3f ( 1.0f , 1.0f , 0.0f );     // 右上
          glVertex 3f ( 1.0f ,- 1.0f , 0.0f );     // 左下
          glVertex 3f (- 1.0f ,- 1.0f , 0.0f );     // 右下
      glEnd();                    // 正方形绘制结束
      return TRUE;                  // 继续运行
  }

  最后换掉窗口模式下的标题内容。

             
if (keys[VK_F1])         // F1键按下了么?
              {
                  keys[VK_F1]=FALSE;    // 若是,使对应的Key数组中的值为 FALSE
                  KillGLWindow();      // 销毁当前的窗口
                  fullscreen=!fullscreen;  // 切换 全屏 / 窗口 模式
                  // 重建 OpenGL 窗口(修改)
                  if (!CreateGLWindow("NeHe's Color Tutorial",
                      640,480,16,fullscreen))
                  {
                      return 0;    // 如果窗口未能创建,程序退出
                  }
              }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值