OpenGL光源、材质和光照模型
2015-10-03 23:30
351 查看
好久没写博客了,从现在开始,养成一个好的习惯,不断的进行总结。
以前都是直接用,效果好就行,不管是具体怎么设置的。现在突然想想什么都学不到,于是就自己动手调试了一番,做了一下总结:
OpenGL在处理光照的过程中主要包含三项内容,光源、材质和光照模型。也就是我们在光照设置的代码中常看到的glLightfv、glMaterialfv和glLightModelfv。其中要注意的是,GL_AMBIENT(环境光)、GL_DIFFUSE(漫反射光)、GL_SPECULAR(镜面反射)这三种属性是光源和材质所共有的。光源和材质的相同属性共同影响,并作用最终的显示效果。
1.光源
光源的设置按照3+1的原则来进行设置,3代表的是GL_AMBIENT、GL_DIFFUSE和GL_SPECULAR这三种属性,1代表的是光源的位置。光源的位置中又包含了两种模
式,一种是位置性光源,一种是方向性光源。具体的可参考OpenGL的API。
在这里不得不提的在整个环境中的光源个数问题。GL_LIGHT0代表第0号光源,依次类推。注意GL_LIGHT0与其他光源的默认属性是有区别的。GL_LIGHT0
GL_DIFFUSE,GL_SPECULAR的默认值是(1.0,1.0,1.0,1.0),而其他光源的默认值是(0.0,0.0,0.0,1.0)。这一点在光源属性的初始化过程中尤为重要。
2.材质
材质除了具有上面提到的那3个属性外,另外还增加了GL_SHININESS(镜面指数)和GL_EMISSION,这些属性的设置根据OpenGL的API可以完成设置。
但是,材质的颜色与光源的颜色有些不同。对于光源,R、G、B 值等于R、G、B 对其最大强度的百分比。若光源颜色的R、G、B 值都是1.0,则是最强的白光;若值变
为0.5,颜色仍为白色,但强度为原来的一半,于是表现为灰色;若R=G=1.0,B=0.0,则光源为黄色。对于材质,R、G、B 值为材质对光的R、G、B 成分的反射率。比
如,一种材质的R=1.0、G=0.5、B=0.0,则材质反射全部的红色成分,一半的绿色成分,不反射蓝色成分。也就是说,若OpenGL 的光源颜色为(LR、LG、LB),材质颜
色为(MR、MG、MB),那么,在忽略所有其他反射效果的情况下,最终到达眼睛的光的颜色为(LR*MR、LG*MG、LB*MB)。
3.光照模型
光照模型包含四部分,分别为:全局环境光,近视点或远视点,双面光照,镜面反射颜色是否和环境颜色、散射颜色分开。没什么特殊要求按照我提供的代码进行设置
即可。一般项目对这部分很少做细致的要求。
最后,别忘记先开光照,然后在打开设置好的灯。
附本人调试好的源代码,希望大家互相交流。
以前都是直接用,效果好就行,不管是具体怎么设置的。现在突然想想什么都学不到,于是就自己动手调试了一番,做了一下总结:
OpenGL在处理光照的过程中主要包含三项内容,光源、材质和光照模型。也就是我们在光照设置的代码中常看到的glLightfv、glMaterialfv和glLightModelfv。其中要注意的是,GL_AMBIENT(环境光)、GL_DIFFUSE(漫反射光)、GL_SPECULAR(镜面反射)这三种属性是光源和材质所共有的。光源和材质的相同属性共同影响,并作用最终的显示效果。
1.光源
光源的设置按照3+1的原则来进行设置,3代表的是GL_AMBIENT、GL_DIFFUSE和GL_SPECULAR这三种属性,1代表的是光源的位置。光源的位置中又包含了两种模
式,一种是位置性光源,一种是方向性光源。具体的可参考OpenGL的API。
在这里不得不提的在整个环境中的光源个数问题。GL_LIGHT0代表第0号光源,依次类推。注意GL_LIGHT0与其他光源的默认属性是有区别的。GL_LIGHT0
GL_DIFFUSE,GL_SPECULAR的默认值是(1.0,1.0,1.0,1.0),而其他光源的默认值是(0.0,0.0,0.0,1.0)。这一点在光源属性的初始化过程中尤为重要。
2.材质
材质除了具有上面提到的那3个属性外,另外还增加了GL_SHININESS(镜面指数)和GL_EMISSION,这些属性的设置根据OpenGL的API可以完成设置。
但是,材质的颜色与光源的颜色有些不同。对于光源,R、G、B 值等于R、G、B 对其最大强度的百分比。若光源颜色的R、G、B 值都是1.0,则是最强的白光;若值变
为0.5,颜色仍为白色,但强度为原来的一半,于是表现为灰色;若R=G=1.0,B=0.0,则光源为黄色。对于材质,R、G、B 值为材质对光的R、G、B 成分的反射率。比
如,一种材质的R=1.0、G=0.5、B=0.0,则材质反射全部的红色成分,一半的绿色成分,不反射蓝色成分。也就是说,若OpenGL 的光源颜色为(LR、LG、LB),材质颜
色为(MR、MG、MB),那么,在忽略所有其他反射效果的情况下,最终到达眼睛的光的颜色为(LR*MR、LG*MG、LB*MB)。
3.光照模型
光照模型包含四部分,分别为:全局环境光,近视点或远视点,双面光照,镜面反射颜色是否和环境颜色、散射颜色分开。没什么特殊要求按照我提供的代码进行设置
即可。一般项目对这部分很少做细致的要求。
最后,别忘记先开光照,然后在打开设置好的灯。
附本人调试好的源代码,希望大家互相交流。
相关文章推荐
- 局域网ip地址用手机访问Apache服务器的默认网页
- 快速排序——PowerShell版
- bfs 拓扑排序 bnu Usoperanto
- Windows Azure Virtual Machine (25) 使用SSH登录Azure Linux虚拟机
- XAMPP 的安装配置(Linux 版)
- OP趋势系统
- 自动化运维工具puppet(二)
- linux中文件属性和权限修改命令chgrp|chown|chmod介绍
- Hadoop学习笔记(六)启动Shell分析
- 找出第二个文本抄袭第一个文本的所有位置和长度 后缀数组 UVA 10526 - Intellectual Property
- 网站用户存在状态的session用法及例子
- Linux对rm的误操作预防
- centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~/.bash_profile 2015-4-10 第十三节课
- CentOS 6.7下PXE+Kickstart无人值守安装操作系统
- 关于AVAudioPlayer
- Apache容器扩展类和常用方法
- Opentack常用技巧
- ksh 文件测试
- Photoshop设计时尚绚丽的电影海报教程
- TopCoder SRM 669 DIV 1