第三课:颜色渲染
添加颜色:
作为第二课的扩展,我将叫你如何使用颜色。你将理解两种着色模式,在左图中,三角形用的是光滑着色,四边形用的是平面着色。
上一课中我教给您三角形和四边形的绘制方法。这一课我将教您给三角形和四边形添加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 颜色渲染",640,480,16,fullscreen))
{
return 0; // 如果窗口未能创建,程序退出
}
}
原文及其个版本源代码下载:
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=03
- 大小: 1.8 KB
分享到:
相关推荐
导数的计算是导数学习中的重要环节,试卷中的第3题和第11题以及第12题都不同程度地涉及到了这一点。第3题需要学生通过函数的导数来求解参数a的值,这考验了学生对复合函数导数及基本运算规则的熟练程度。而第11题和...
3. **统计分析**:第三题通过月用水量的数据分布,找出了众数和中位数,这涉及到了数据集中趋势的统计概念。 4. **菱形性质**:第四题利用菱形的对角线互相垂直平分的特性,推断OE的长度,考察几何图形的性质和线段...
第3题涉及集合间的关系,有助于锻炼学生对集合运算规则的理解。第4题是逻辑推理题,考查学生的逻辑思维能力。而第5题通过零点存在定理来判断函数零点区间,这要求学生不仅掌握理论,更需熟练运用。 多项选择题部分...
此资源为“黑龙江省齐齐哈尔市市讷河一中2020届高三英语联考试题PDF”,是一份针对高三学生的英语考试试卷,主要目的是检验学生在高三阶段对英语知识的掌握程度,为高考做好准备。试题包含了听力、阅读、写作等多个...
3. 卡方检验:题目3中提到的K2是卡方检验的统计量,用于判断两个分类变量之间是否存在关联。K2的观测值越大,拒绝原假设(即无关联)的证据越强。题目中给出了k0的表格,根据k值选择对应的概率,判断关联性显著性。 ...
黑龙江省讷河市拉哈一中2020-2021学年高一下学期4月月考语文试卷 Word版含答案.doc
公路桥梁隧道施工组织设计是大型土木工程项目中的关键环节,对于鸡西至讷河公路建设项目C23标段这样的工程,其施工组织设计涉及到多个重要知识点。以下将详细阐述这些内容: 1. **项目背景与目标**:鸡西至讷河公路...
- **考试范围**:根据标题“黑龙江省齐齐哈尔市讷河一中2020届高三数学联考试题理PDF”,可以推测此次联考主要面向高三理科学生,考试内容将涵盖高中数学的所有核心知识点。 ### 高三数学核心知识点 从给定的部分...
《鸡西至讷河公路建设项目C23标段施工组织设计》是一份全面阐述公路建设过程中施工规划与管理的重要文档,旨在确保工程的顺利进行、质量和安全。在公路桥梁隧道施工组织设计中,涵盖了许多关键知识点,下面将逐一...
- **考试内容**:根据标题“黑龙江省齐齐哈尔市讷河一中2020届高三数学联考试题文PDF”,可以推测此次联考主要涉及高三阶段的数学知识点,包括但不限于函数、数列、不等式、立体几何、解析几何、概率统计等内容。...
黑龙江省齐齐哈尔市市讷河一中2020届高三理综联考试题PDF
《英雄》音乐微案例;黑龙江省讷河市六合镇中心学校赵明丽.doc
7. 象限划分:第一象限是正x轴和正y轴围成的区域,第二象限是负x轴和正y轴围成的区域,第三象限是负x轴和负y轴围成的区域,第四象限是正x轴和负y轴围成的区域。点的坐标决定了它所在的象限。 8. 坐标的性质:若点在...
保护青山绿水 构筑生态文明——讷河市新能源公交车全面上路运营掠影.pdf
2021届黑龙江省讷河市拉哈一中高一下学期历史3月月考试题.doc
3. **总结与延伸**:鼓励学生思考除了文字记录外,还可以采用哪些方式记录访谈内容(例如绘制简图)。此外,建议学生有机会亲自操作农具,以加深理解。 - **知识点**:探讨访谈技巧的实际应用,以及如何利用多种...
黑龙江省讷河市张静中学第一学期初三期中考试语文考试题及答案.doc.pdf
第三题进一步考察了导数在解决实际问题中的作用,通过对导数的求解来确定函数参数的值,这不仅要求学生了解导数的计算方法,还要能利用导数的性质解决具体问题。第四题强调了导数与斜率的关系,要求学生利用导数来...
《鸡西至讷河公路建设项目C23标段——施工组织与CAD技术在道路工程中的应用》 在交通基础设施建设中,公路项目是一项至关重要的工程,对于区域经济发展和社会进步具有深远影响。本项目——“鸡西至讷河公路建设项目...