第03课 OpenGL 添加颜色

添加颜色:

作为第二课的扩展,我将叫你如何使用颜色。你将理解两种着色模式,在下图中,三角形用的是光滑着色,四边形用的是平面着色

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

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

        // 重建 OpenGL 窗口

        if (!CreateGLWindow("NeHe‘s颜色实例",640,480,16,fullscreen))

在这一课中,我试着尽量详细的解释如何为您的OpenGL多边形添加单调和平滑的着色效果的步骤。改改代码中的红绿蓝分量值,看看最后y有什么样的结果。如果您有什么意见或建议请给我EMAIL。如果您认为有什么不对或可以改进,请告诉我。我想做最好的OpenGL教程并对您的反馈感兴趣。

时间: 2024-10-11 13:40:31

第03课 OpenGL 添加颜色的相关文章

操作DOM元素,Dom元素添加颜色,删除第二个li元素

<html> <head> <title>demo</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> /* 示例操作DOM元素 */ window.onload = function(){ //给Dom元素添

智慧解析第03课下:春秋故事 出逃

智慧解析第03课下:春秋故事 出逃,布布扣,bubuko.com

智慧解析第03课上:战国故事 相如出世

智慧解析第03课上:战国故事 相如出世,布布扣,bubuko.com

mfc中 控件 对话框 添加颜色 背景图片

1 设置对话框透明 在设置控件颜色中要使用 nCtlColor Contains one of the following values, specifying the type of control: CTLCOLOR_BTN   Button control CTLCOLOR_DLG   Dialog box CTLCOLOR_EDIT   Edit control CTLCOLOR_LISTBOX   List-box control CTLCOLOR_MSGBOX   Message b

canvas给图形添加颜色

canvas给图形添加颜色 合法属性 ctx.fillStyle = 'orange'; ctx.fillStyle = '#FFA500'; ctx.fillStyle = 'rgb(255, 165, 0)'; ctx.fillStyle = 'rgba(255, 165, 0, 1)'; strokeStyle类似 ctx.globalAlpha = 0.2; 设置全局透明度 给图形上色 const canvas = document.getElementById('canvas'); c

在脚本中添加颜色

shell脚本一直单调,但是在图形环境下运行,除了read和echo语句外,还有其他许多与脚本用户交互的方法.这一节深入介绍几种不同的方法. 1.创建文本菜单 创建交互式的shell文本,主要使用case语句 1.1.创建菜单布局 确定所要显示的内容: echo -e #-e指定了输出内容中必须要包含制表符和换行符. 例如:echo -e "1.\tDisplay disk space" 设置菜单: clear echo echo -e "\t\t\tSys Admin Me

openGl从零开始之添加颜色

OpenGL 支持两种颜色模式:一种是 RGBA模式,一种是 颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数据,即通过每一个像素的颜色,来改变整体图形的颜色.不同的是, RGBA 模式中,数据直接就代表了颜色:而颜色索引模式中,数据代表的是一个索引,要得到真正的颜色,还必须去查索引表.具体如下: 1.RGBA模式 RGBA 模式中,每一个像素会保存以下数据: R 值(红色分量). G 值(绿色分量). B 值(蓝色分量)和A 值( alpha 分量). 其中红.绿.蓝三种颜

第05课 OpenGL 3D空间

3D空间: 我们使用多边形和四边形创建3D物体,在这一课里,我们把三角形变为立体的金子塔形状,把四边形变为立方体. 在上节课的内容上作些扩展,我们现在开始生成真正的3D对象,而不是象前两节课中那样3D世界中的2D对象.我们给三角形增加一个左侧面,一个右侧面,一个后侧面来生成一个金字塔(四棱锥).给正方形增加左.右.上.下及背面生成一个立方体. 我们混合金字塔上的颜色,创建一个平滑着色的对象.给立方体的每一面则来个不同的颜色. int DrawGLScene(GLvoid) // 此过程中包括所有

第07课 OpenGL 光照和键盘(1)

光照和键盘控制: 在这一课里,我们将添加光照和键盘控制,它让程序看起来更美观. 这一课我会教您如何使用三种不同的纹理滤波方式.教您如何使用键盘来移动场景中的对象,还会教您在OpenGL场景中应用简单的光照.这一课包含了很多内容,如果您对前面的课程有疑问的话,先回头复习一下.进入后面的代码之前,很好的理解基础知识十分重要.我们还是在第一课的代码上加以修改.跟以前不一样的是,只要有任何大的改动,我都会写出整段代码.程序开始,我们先加上几个新的变量. 下面几行是新的.我们增加三个布尔变量. light