`
hereson3
  • 浏览: 163022 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

OpenGL 入门教程(八)

阅读更多

本文源自: http://dev.gameres.com/Program/Visual/3D/OpenGLTutorial/OpenGL_8.htm ?

OpenGL中使用RGBA色彩体系,RGB为红绿蓝三原色,A为?值,该值代表色彩融合时所占的比例。颜色是顶点的重要属性之一,没有色彩的世界是毫无生气的。

使用glColor*(R,G,B,A);设定当前颜色,此后定义所有的顶点都将是这个颜色的,直到再次改变当前颜色。该命令有两种常用形式glColor*f和glColor*ub,后者可以直接使用GetRValue(pixel)取得的颜色分量作为参数。下面左边的代码就可以生成右边漂亮的三角形:


glBegin(GL_TRIANGLES);

             glColor3f(1.0,0.0,0.0);
             glVertex3f(-1.0,0.0,0.0);

             glColor3f(0.0,1.0,0.0);
             glVertex3f(0.0,1.0,0.0);

             glColor3f(0.0,0.0,1.0);
             glVertex3f(1.0,0.0,0.0);

             glEnd();
 

 可以看出,相邻顶点之间的部份也会有颜色,实际上OpenGL会在顶点之间进行插值分割,最终计算出对应光栅每一点的颜色,这个计算结果就是最终显示在屏幕上的图像。

也许上边的代码和文字暗示你给顶点指定的颜色就是屏幕图像上显示的颜色,其实最终的颜色取决于多个因素:顶点材质、法线方向、光照条件。不同颜色的光从不同角度照射在顶点上,顶点的颜色也会发生变化。上面的图是在白色光垂直照射条件下得到的(这也是默认设定)。

我们也可以不简单的指定顶点颜色,而是详细的说明该顶点产生的环境光、漫反射光、镜面反射光的颜色。OpenGL使用一种简易方法计算出面的图像:根据法向和光源位置的关系将以上几种光的颜色结合灯光对应成份颜色分别指定平面的各部份。从一个顶点产生的反射光不会再照射到其它顶点上,它对其它部份的影响直接在环境光中定义。要想取得更逼真的图像,可以使用光线追踪算法,该方法沿着每一条光线的轨迹,计算出它对所有顶点的影响,将所有光线的效果合并就是最终的图像,由于反射光的照明效果也是精确计算出来的,所以图像逼真。但是OpenGL并不直接支持该方法,需要自己编写计算例程,感兴趣的话去看看光线追踪的书好了。

用glMaterial*指定当前材质,第一个参数说明是给面的哪一侧指定材质(前或者后,详见法向部份说明),第二个参数指定要修改的分量,最后部份参数是相应的值。


GLfloat ambient[] ={0.8,0.8,0.8,1.0};//环境光
GLfloat diffuse[] ={0.8,0.0,0.8,1.0};//漫反射特性
GLfloat specular[] ={1.0,0.0,1.0,1.0};//镜面反射光色
GLfloat shininess[] ={50.0}; //镜面反射的光亮度
glMaterialfv(GL_FRONT,GL_AMBIENT,ambient);
glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,specular);
glMaterialfv(GL_FRONT,GL_SHININESS,shininess);
gluSphere(obj,0.1,10,10);//用10X10个面绘制半径0.1的球面 


OpenGL还支持自动双面模式,这种模式下定义的每个面都将生成两个面,位置重合但法向相反,这可以简化对背面和物体内部的描述。该模式默认为关闭。
开/关命令是:
void glLightModel* GL_LIGHT_MODEL_TWO_SIDE,0/1);

打开颜色材质可以简化材质设定,在颜色材质打开时,可以用glColor直接给定顶点材质的颜色,设定材质的哪部分可用glColorMaterial(face,mode);命令设定。而不用象上面那样写一串罗嗦的代码。但是由于不能对材质属性做细节控制,只适用于一些特定的场合。命令是:glEnable(GL_COLOR_MATERIAL);默认值为Disabled。
 

分享到:
评论

相关推荐

    OpenGL入门教程(精).pdf

    ### OpenGL入门教程知识点详解 #### 一、OpenGL简介与优势 **OpenGL** 是一种跨语言、跨平台的应用程序编程接口(API),主要用于渲染2D、3D矢量图形。它是图形学领域的一个重要标准,被广泛应用于游戏开发、虚拟...

    OpenGL入门教程实例

    OpenGL入门教程实例 OpenGL入门教程实例 OpenGL入门教程实例 OpenGL入门教程实例 OpenGL入门教程实例 OpenGL入门教程实例 OpenGL入门教程实例

    OpenGL入门教程(精)

    OpenGL入门教程(精)

    OpenGL入门教程pdf(最基础)

    入门教程内容: - 学习OpenGL能使人掌握创建绚丽PC游戏所必需的编程技能,突破老旧图形接口的限制。 - OpenGL之所以是主流图形API之一,是因为它具有与C语言的紧密结合、优秀的可移植性以及高性能的图形渲染能力。 -...

    OpenGL入门经典教程

    ### OpenGL入门经典教程知识点概述 #### 一、OpenGL简介及特点 - **替代传统图形库**:传统的图形库,如TC中的`<graphics.h>`,虽然简单易用,但功能有限,仅支持较低分辨率(例如640x480)和较少的颜色模式(如16...

    OpenGL入门教程(精选)相关例子试验代码

    OpenGL入门教程是学习图形编程的重要资源,特别是对于初学者来说,它能帮助理解3D图形渲染的基本原理。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D、3D图像。在这个“OpenGL入门教程(精选)相关例子试验代码...

    OpenGL入门教程12讲代码加解析

    OpenGL入门教程12讲代码加解析

    OpenGL入门教程

    OpenGL入门教程 OpenGL入门教程 OpenGL入门教程

    OpenGL入门教程,教你理解

    OpenGL入门教程旨在帮助初学者快速掌握这一强大的图形编程接口,为3D图形处理打下坚实的基础。OpenGL是一种跨语言、跨平台的编程接口,用于渲染2D、3D矢量图形。它广泛应用于游戏开发、科学可视化、工程设计等多个...

    opengl入门教程.doc

    OpenGL入门教程旨在帮助初学者掌握这个强大的图形编程接口。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D和3D图形。它的核心库包含了115个基础函数,这些函数可在任何支持OpenGL的平台上运行。在此基础上,...

    OpenGL入门教程.pdf

    ### OpenGL入门教程知识点详解 #### 一、OpenGL简介与优势 **OpenGL**(Open Graphics Library)是一种跨语言、跨平台的应用程序编程接口(API),主要用于渲染2D、3D矢量图形。它由一系列调用构成,这些调用定义...

    android OpenGL 入门 教程

    android OpenGL 入门 教程 12 个小case 。

    OpenGL教程.pdf

    OpenGL教程.pdf

    opengl教程,轻松入门

    opengl教程,轻松入门 opengl教程,轻松入门 opengl教程,轻松入门 opengl教程,轻松入门

    Opengl入门案例教程.zip

    QT opengl入门教程案例

    Android opengl 入门教程

    android2.2 opengl es 2.0 入门基础代码教程 通过简单代码总结,帮助新手入门。 内容包括:绘制基础、投影方式、光照效果、纹理绘制几个方面。

Global site tag (gtag.js) - Google Analytics