OpenGL中的颜色光照和材质
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实例:二次曲面物体光照与材质
步骤1:设置光照 基础知识
创建光源 光源有许多特性,如颜色、位置、方向等。 设置光源特性参数的函数: void glLight{if}[v]( GLenum light , GLenum pname , TYPE param ) 参数light指定所创建的光源号,如 GL_LIGHT0 , GL_LIGHT1 ,GL_LIGHT2 ... ... 参数pname指定光源特性 参数param设置相应光源特性值
(1)GL_AMBIENT、GL_DIFFUSE、 GL_SPECULAR属性。
这三个属性表示了光源所发出的光的反射特性(以及颜色)。 每个属性由四个值表示,分别代表了颜色的R, G, B, A值。 GL_AMBIENT表示该光源所发出的光,经过非常多次的反射后, 最终在整个光照环境中的强度(颜色)。GL_DIFFUSE表示该 光源所发出的光,照射到粗糙表面时经过漫反射,所得到的光 的强度(颜色)。GL_SPECULAR表示该光源所发出的光,照 射到光滑表面时经过镜面反射,所得到的光的强度(颜色)。
步骤1:设置光照:glLightfv
glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);
表示要设置的是环境光成分,第三个参数则是一个数组(表示光照属性值)
//设置场景的环境光。第一个参数表示是对第0号光源GL_LIGHT0进行设置,第二个参数
glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);
GL_LIGHT0进行设置,第二个参数表示要设置的是漫反射光成分,第三个参 数则是一个数组(表示光照属性值)
//设置在场景照射到粗糙表面时经过漫反射光。第一个参数表示是对第0号光源
glLightfv(GL_LIGHT0,GL_POSITION,light_position); //设置光源的位置,第三个参数则是一个数组(表示光源的位置值)
向场景中加入光照的步骤如下:
1. 定义所有物体每个顶点的法向量方向。这 些法向量决定了物体表面与光源的相对取向。 2. 建立、选择并放置一个或多个光源。 3. 建立并选择一个光照模型,它决定了全局 环境光照的程度以及视点的有效位置(用于光照计 算)。 4. 定义场景中物体的材质。
向场景中加入光照的步骤(函数):
1.为顶点指定法向量:glNormal3fv(n0);glVertex3fv(v0); 不指定就是默认模式。 2.创建光源,指定位置: glLightfv(GL_LIGHT0,GL_POSITION,light_position); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);注意,GL_POSITION的默认 值为(0,0,1,0),它定义了一个指向Z轴负方向的定向光源. 3.选择光照模型:其包括四项内容,即全局环境光强度,观察点靠近场景还是位于无 穷远处,对物体的正面和背面是否采用相同的光照计算,以及是否将镜面反射颜 色同环境颜色和散射颜色分开,并在纹理操作后应用它.函数有 glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER,lmodel_viewer)……,其 中近视点还是远视点只影响镜面反射区的计算. 4.启用光照:glEnable(GL_LIGHTING);glEnable(GL_LIGHT0); 5.设置材质属性: 用glMaterialfv(GLenum face, GLenum pname, Type* param)函数设置 GL_AMBIENT, GL_DIFFUSE, GL_AMBIENT_AND_DIFFUSE, GL_SPECULAR, GL_SHINNESS, GL_EMISSION等值.
OpenGL 中的颜色、光照和材质
简单光照 OpenGL简单光照光源 分为:
简单光照 OpenGL简单光照光源分为: 辐射光(Emitted Light)是最简单的一种光,它直接从 物体发出并且不受任何光源影响。 环境光(Ambient Light)是由光源发出经环境多次散射 而无法确定其方向的光,即似乎来自所有方向。 漫射光(Diffuse Light)来自一个方向,它垂直于物体时 比倾斜时更明亮。 镜面光(Specular Light)来自特定方向并沿另一方向反 射出去。
(2)GL_POSITION属性。
Байду номын сангаас
表示光源所在的位置。由四个值(X, Y, Z, W)表示。 如果第四个值W为零,则表示该光源位于无限远处, 前三个值表示了它所在的方向。这种光源称为方向性 光源,通常,太阳可以近似的被认为是方向性光源。 如果第四个值W不为零,则X/W, Y/W, Z/W表示了光 源的位置。这种光源称为位置性光源。
定义光照属性值,分别用数组表示:
float lightAmbient[] = { 0.2f, 0.0f, 0.0f, 1.0f };
//定义一个数组,表示整个光照环境,有4个值,分别表示光源中含有 红、绿、蓝三种光线的成分 ,第四个参数为透明度值,一般也为1。
float lightDiffuse[] = { 0.5f, 0.0f, 0.0f, 1.0f };
//定义数组,用来表示光源的漫反射.
float lightSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };//
//定义数组,用来表示光源的镜面反射
光源知识:
每一个光源都可以设置其属性,这一动作是通 过glLight*函数完成的。 glLight*函数具有三个参数,第一个参数指明 是设置哪一个光源的属性,第二个参数指明是 设置该光源的哪一个属性,第三个参数则是指 明把该属性值设置成多少。 光源的属性众多,下面将分别介绍光源的属性。