着色:Jeff Molofee(NeHe) 的 OPENGL 教程-第三课

原创 2001年05月02日 15:54:00

Jeff Molofee(NeHe) 的 OPENGL 教程

第三课

Translated by
CKER

Lesson 3 第三课


上一课中我教给您三角形和四边形的绘制方法。这一课我将教您给三角形和四边形添加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 )

NeHe OpenGL系列教程(中英文版附带VC++源码)中英文系列

NeHe OpenGL教程(中英文版附带VC++源码)中英文系列 Lesson 01-lesson 02 创建一个OpenGL窗口: 如何创建三角形和四边形 http://ieee...
  • jmppok
  • jmppok
  • 2013年12月16日 10:25
  • 1788

opengl学习笔记1:vs2013 nehe教程第一课 创建窗口

近来需要想学习一下opengl,但是小白没有任何基础,也非计算机专业出身,只能一步一步学习nehe的程序来学习了。这里实现了在WIN10 vs2013 opengl2.0 环境下跑通nehe教程第一课...
  • caimagic
  • caimagic
  • 2016年01月29日 15:11
  • 934

【OpenGL】nehe教程第一课学习笔记

nehe教程的第一课主要讲了OpenGL程序的创建。 它引用了最基本的gl.h、glu.h、glaux.h三个头文件。 包含了五个函数,分别是InitGL、ResizeGLScene、DrawGLSc...
  • lzh1590
  • lzh1590
  • 2017年03月22日 16:22
  • 210

对OpenGL的初步认识及多版本框架介绍(基于NeHe的OpenGL教程)

由于以后接触的技术和图形有关,所以最近也是来学学习一下opengl的相关知识点。当然有看到《opengl编程指南》这本红宝书,但是对于初学者来言,这本书需要花很多精力,所以我找到了《NeHe的open...
  • aptx704610875
  • aptx704610875
  • 2014年06月30日 01:25
  • 1411

Nehe OpenGL教程第一课-创建一个OpenGL窗口(Win32)

原文地址为:Creating an OpenGL Window (Win32),翻译的chm格式文档下载地址为:OpenGL教程电子书(chm格式)中文版,源代码在官网上也可以下载到,更完整的源代码可...
  • ccf19881030
  • ccf19881030
  • 2014年01月10日 13:41
  • 3494

Qt下使用OpenGL(23)-根据NeHe的教程改写的

第二十三课:球面映射 nehewidget.h
  • H349117102
  • H349117102
  • 2014年04月14日 16:25
  • 1149

用OpenInventor实现的NeHe OpenGL教程-第三课

用OpenInventor实现的NeHe OpenGL教程-第三课          这节课将在第二课的基础上讨论如何使用颜色。与OpenGL类似,OpenInventor也提供了两种色彩模...
  • wozhengtao
  • wozhengtao
  • 2016年04月05日 01:26
  • 671

用OpenInventor实现的NeHe OpenGL教程-第三课

用OpenInventor实现的NeHe OpenGL教程-第三课          这节课将在第二课的基础上讨论如何使用颜色。与OpenGL类似,OpenInventor也提供了两种色彩模式。我们将...
  • xirongxu_dlut
  • xirongxu_dlut
  • 2017年01月12日 16:22
  • 110

Opengl 入门教程的翻译

非常感谢此博客博主的分享,看了之后受益匪浅!(原文http://blog.csdn.net/s_xing/article/details/30244247) Opengl 入门教程的翻译 今天...
  • hbw1992322
  • hbw1992322
  • 2016年07月29日 20:52
  • 437

【OpenGL】(NeHe教程学习)纹理映射及代码实现

本文将要实现的功能是绘制一个立方体,并且在六个面贴上不同的纹理(由外部导入图片)。按下x、y、z按键可以分别围绕x、y、z轴旋转。 在这里我使用的是GLUT库。 【1】读入bmp图片的信息...
  • vampirem
  • vampirem
  • 2013年10月16日 13:18
  • 839
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:着色:Jeff Molofee(NeHe) 的 OPENGL 教程-第三课
举报原因:
原因补充:

(最多只允许输入30个字)