Graphics 版 (精华区)

发信人: JJason (UFO), 信区: Graphics
标  题: Jeff Molofee(NeHe) 的 OPENGL 教程-第03课
发信站: 哈工大紫丁香 (2002年10月31日08:37:38 星期四), 站内信件

标题     着色:Jeff Molofee(NeHe) 的 OPENGL 教程-第三课    cker(翻译)  
  
关键字     OpenGL CKER 
  
出处     http://nehe.gamedev.net/tutorials 
  

Jeff Molofee(NeHe) 的 OPENGL 教程 
 
第三课 
 Translated by 
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); // 绘制三角形  
如果您还记得上节课的内容,这段代码在屏幕的左半部分绘制三角形。下一行代码是我们
第一次使用命令glColor3f(r,g,b)。括号中的三个参数依次是红、绿、蓝三色分量。取值
范围可以从0,0f到1.0f。类似于以前所讲的清除屏幕背景命令。 

我们将颜色设为红色(纯红色,无绿色,无蓝色)。接下来的一行代码设置三角形的第一个
顶点(三角形的上顶点),并使用当前颜色(红色)来绘制。从现在开始所有的绘制的对象的
颜色都是红色,直到我们将红色改变成别的什么颜色。  
glColor3f(1.0f,0.0f,0.0f); //设置当前色为红色 
glVertex3f( 0.0f, 1.0f, 0.0f); // 上顶点 
 
第一个红色顶点已经设置完毕。接下来我们设置第二个绿色顶点。三角形的左下顶点被设
为绿色。  
glColor3f(0.0f,1.0f,0.0f);//设置当前色为绿色 
glVertex3f(-1.0f,-1.0f, 0.0f); // 左下  
现在设置第三个也就是最后一个顶点。开始绘制之前将颜色设为蓝色。这将是三角形的右
下顶点。glEnd()出现后,三角形将被填充。但是因为每个顶点有不同的颜色,因此看起来
颜色从每个角喷出,并刚好在三角形的中心汇合,三种颜色相互混合。这就是平滑着色。 
 
glColor3f(0.0f,0.0f,1.0f);//设置当前色为蓝色 
glVertex3f( 1.0f,-1.0f, 0.0f); // 右下 
glEnd(); // 三角形绘制结束 

glTranslatef(3.0f,0.0f,0.0f); // 右移3单位  
现在我们绘制一个单调着色-蓝色的正方形。最重要的是要记住,设置当前色之后绘制的
所有东东都是当前色的。以后您所创建的每个工程都要使用颜色。即便是在完全采用纹理
贴图的时候,glColor3f仍旧可以用来调节纹理的色调。等等....,以后再说吧。 

我们必须要做的事只需将颜色一次性的设为我们想采用的颜色(本例采用蓝色),然后绘制
场景。每个顶点都是蓝色的,因为我们没有告诉OpenGL要改变顶点的颜色。最后的结果是.
....全蓝色的正方形。再说一遍,顺时针绘制的正方形意味着我们所看见的是四边形的背
面。  
glColor3f(0.5f,0.5f,1.0f); // 一次性将当前色设置为蓝色 
glBegin(GL_QUADS); // 绘制正方形 
glVertex3f(-1.0f, 1.0f, 0.0f); // 左上 
glVertex3f( 1.0f, 1.0f, 0.0f); // 右上 
glVertex3f( 1.0f,-1.0f, 0.0f); // 左下 
glVertex3f(-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; // 如果窗口未能创建,程序退出 

}  
在这一课中,我试着尽量详细的解释如何为您的OpenGL多边形添加单调和平滑的着色效果
的步骤。改改代码中的红绿蓝分量值,看看最后y有什么样的结果。如果您有什么意见或建
议请给我EMAIL。如果您认为有什么不对或可以改进,请告诉我。我想做最好的OpenGL教程
并对您的反馈感兴趣。 
{译者:NeHe的文档似乎很简单,似乎很罗嗦。但仔细想来这样的高手您又见过几个?还是
那句话,我不是高手,希望您是,真诚的。} 
下面是源代码下载链接。祝您好运!  
* DOWNLOAD Visual C++ Code For This Lesson. 
* DOWNLOAD Visual Basic Code For This Lesson. ( Conversion by Ross Dawson ) 
* DOWNLOAD GLUT Code For This Lesson. ( Conversion by Andy Restad ) 
* DOWNLOAD Cygwin (FREE Language) Code For This Lesson. ( Conversion by 
Stephan Ferraro ) 
* DOWNLOAD Delphi Code For This Lesson. ( Conversion by Peter De Jaegher ) 
* DOWNLOAD MacOS X/GLUT Code For This Lesson. ( Conversion by Raal Goff ) 
* DOWNLOAD Linux/GLX Code For This Lesson. ( Conversion by Mihael Vrbanec ) 
* DOWNLOAD Code Warrior 5 Code For This Lesson. ( Conversion by Scott Lupton ) 
* DOWNLOAD MASM Code For This Lesson. ( Conversion by Nico (Scalp) ) 
* DOWNLOAD ASM Code For This Lesson. ( Conversion by Foolman ) 
* DOWNLOAD Visual Fortran Code For This Lesson. ( Conversion by Jean-Philippe 
Perois ) 
* DOWNLOAD Linux Code For This Lesson. ( Conversion by Richard Campbell ) 
* DOWNLOAD Irix Code For This Lesson. ( Conversion by Lakmal Gunasekara ) 
* DOWNLOAD Solaris Code For This Lesson. ( Conversion by Lakmal Gunasekara ) 
* DOWNLOAD Mac OS Code For This Lesson. ( Conversion by Anthony Parker ) 
* DOWNLOAD Power Basic Code For This Lesson. ( Conversion by Angus Law ) 
* DOWNLOAD BeOS Code For This Lesson. ( Conversion by Chris Herborth ) 
* DOWNLOAD Java Code For This Lesson. ( Conversion by Darren Hodges ) 
* DOWNLOAD Borland C++ Builder 4.0 Code For This Lesson. ( Conversion by 
Patrick Salmons ) 
* DOWNLOAD MingW32 & Allegro Code For This Lesson. ( Conversion by Peter Puck 

* DOWNLOAD Python Code For This Lesson. ( Conversion by John )  
 
 
--

     人生,就是一团欲望:
     欲望没有满足的时候就是痛苦,
     欲望被满足的时候就是无聊;
     人生就是在痛苦与无聊之间徘徊。

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.229.69]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.468毫秒