OpenGL光源、材质和光照模型
来源:互联网 发布:泰勒斯威夫特 知乎 编辑:程序博客网 时间:2024/05/14 10:29
好久没写博客了,从现在开始,养成一个好的习惯,不断的进行总结。
以前都是直接用,效果好就行,不管是具体怎么设置的。现在突然想想什么都学不到,于是就自己动手调试了一番,做了一下总结:
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光源、材质和光照模型
- OpenGL光照和材质
- OpenGL 光照和材质
- OpenGL材质和光照(转)
- OpenGL中的颜色、光照和材质(一)——OpenGL的光照模型
- OpenGL光源光照基础
- OpenGL材质和光照(转)part2
- OpenGL材质和光照(转)part1
- DirectX 光源、光照模型
- [OPENGL]纹理,材质,光照
- [OPENGL]纹理,材质,光照
- [OPENGL]纹理,材质,光照
- Opengl中光照、材质
- 进阶光照与材质之光照和反射模型
- OpenGL光源光照使用范例
- OpenGL光源光照使用范例
- OpenGL学习: 光照系列3-光源类型和使用多个光源
- OpengL学习之光照和材质小窥
- 动手学习TCP:客户端状态变迁
- winform快速开发平台 -> 基础组件之分页控件
- MyEclipse中disable maven nature如何恢复
- 笔记:Oracle SQL 高级查询简介 (3) MODEL子句,PIVOT与UNPIVOT子句
- 解决android横竖屏切换activity重新创建
- OpenGL光源、材质和光照模型
- bzoj1672【Usaco2005Dec】Cleaning Shifts 清理牛棚
- virtualbox共享剪贴板的问题
- [LeetCode] Ugly Number
- ubuntu下virtualbox配置host-only网络
- React Native 开发环境部署
- <Diango 学习之 实现文章展示>
- fork与vfork的使用和区别
- HDU 5495 LCS(其实就是找环)——BestCoder Round #58(div.1 div.2)