OpenGL 材质效果 (转)

 
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*();
当不需要材质颜色追踪当前颜色时,要记得要关闭它,以避免相应的开销。

 

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

 

程序截图

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值