OpenGL 材质效果 (转)

 
OpenGL - Material (材质)
来自:86VR | 作者:IceSharK - PP.Poet | 时间:2004-10-10 |  点击:
在真实世界中,白色物体在绿光照射下看起来是绿色而不是白色,红色物体在绿光照射下看起来是黑色,而有的同样颜色的物体在同样的光照下亮度却不同,这都是由物体的材质不同造成的。

 

场景中物体的颜色取决于物体材质的反射和透射属性。

 

在忽略其他效果的情况下,若光源颜色为( 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*();
当不需要材质颜色追踪当前颜色时,要记得要关闭它,以避免相应的开销。

 

使材质颜色追踪当前颜色 - 示例

 

程序截图

 

 

 


你可能感兴趣的:(C#)