OpenGL - Material (材质) |
来自:86VR | 作者:IceSharK - PP.Poet | 时间:2004-10-10 | 点击: <script language="javascript" src="/scripts/hits.asp?id=3876" type="text/javascript"></script> |
![]() |
在真实世界中,白色物体在绿光照射下看起来是绿色而不是白色,红色物体在绿光照射下看起来是黑色,而有的同样颜色的物体在同样的光照下亮度却不同,这都是由物体的材质不同造成的。 场景中物体的颜色取决于物体材质的反射和透射属性。 在忽略其他效果的情况下,若光源颜色为( LR , LG , LB ),材质颜色为( MR , MG , MB ),最终颜色为( LR*MR , LG*MG , LB*MB )。若有两束光,分别为( R1 , G1 , B1 )和( R2 , G2 , B2 ),材质颜色为( MR , MG , MB ),最终颜色为( (R1+R2)*MR , (G1+G2)*MG , (B1+B2)*MB )。 OpenGL中物体的材质属性包括: 环境反射 漫反射 镜面反射 辐射 ( 关于 辐射 参见 C# - OpenGL - Lighting (光照) 5 辐射光) 材质的定义与光源的定义类似。其函数为: void glMaterial{if}[v]( GLenum face , GLenum pname , TYPE param ); face 定义GL_FRONT(正面)或GL_BACK(背面)或GL_FRONT_AND_BACK(双面) pname 定义特定的材质 param 定义材质的具体数值
![]()
GL_SHINESS 取值范围 [ 0.0 , 128.0 ] 数值越大,镜面高光的范围越小、亮度越大 数值越小,镜面高光的范围越大、亮度越小 材质 - 示例 程序截图 设置 镜面反射 前后
![]()
![]()
使材质颜色追踪当前颜色 函数原型 void glColorMaterial( GLenum face , GLenum mode ); glColorMaterial( GL_FRONT , GL_DIFFUSE ); // 使环境材质颜色追踪当前颜色 glEnable( GL_COLOR_MATERIAL ); // 启用 材质颜色追踪当前颜色 当需要改变场景中单个材质时,建议调用glColorMaterial(); 当需要改变多个材质参数时,建议调用glMaterial*(); 当不需要材质颜色追踪当前颜色时,要记得要关闭它,以避免相应的开销。 使材质颜色追踪当前颜色 - 示例 程序截图
![]()
|