- 18
- 0
- 约8.92千字
- 约 49页
- 2016-04-23 发布于天津
- 举报
opengl中的颜色、光照和材质
OpenGL 中的颜色、光照和材质 简单光照 OpenGL简单光照光源分为: 简单光照 OpenGL简单光照光源分为: 辐射光(Emitted Light)是最简单的一种光,它直接从物体发出并且不受任何光源影响。 环境光(Ambient Light)是由光源发出经环境多次散射而无法确定其方向的光,即似乎来自所有方向。 漫射光(Diffuse Light)来自一个方向,它垂直于物体时比倾斜时更明亮。 镜面光(Specular Light)来自特定方向并沿另一方向反射出去。 向场景中加入光照的步骤如下: 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等值. 实例:二次曲面物体光照与材质 步骤1:设置光照 基础知识 创建光源 光源有许多特性,如颜色、位置、方向等。 设置光源特性参数的函数: void glLight{if}[v]( GLenum light , GLenum pname , TYPE param ) 参数light指定所创建的光源号,如 GL_LIGHT0 ,GL_LIGHT1 ,GL_LIGHT2 ... ...参数pname指定光源特性参数param设置相应光源特性值 步骤1:设置光照:glLightfv glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); //设置场景的环境光。第一个参数表示是对第0号光源GL_LIGHT0进行设置,第二个参数表示要设置的是环境光成分,第三个参数则是一个数组(表示光照属性值) glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); //设置在场景照射到粗糙表面时经过漫反射光。第一个参数表示是对第0号光源GL_LIGHT0进行设置,第二个参数表示要设置的是漫反射光成分,第三个参数则是一个数组(表示光照属性值) glLightfv(GL_LIGHT0,GL_POSITION,light_position); //设置光源的位置,第三个参数则是一个数组(表示光源的位置值) 定义光照属性值,分别用数组表示: 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*函数具
原创力文档

文档评论(0)