OpenGL-光照模型
2012-12-10 16:08
267 查看
1. 光的成分
(1)环境光:经过了充分散射,无法分辨其方向
(2)散射光:来自于某个方向,撞击表面时,均匀的向所有方向发散
(3)镜面光:来自于一个特定的方向,从特定方向反射,具有光泽的金属或塑料具有非常高的镜面成分
(4)发射光:模拟那些源自某个物体的光
Opengl的光照模型根据所反射的红蓝绿光的比例来模拟颜色。
对于光线而言,颜色成分的数量对应于某种颜色的完全强度的百分比,对于材料而言,它的RGB值和它对于这些颜色的反射比例相对应。
如对于光线,RGB都等于0.5,这种光线应该是灰色的。对于材料,若R=1,G=0.5,B=0,则表示反射所有入社红光,一半绿光,不反射蓝光。
2. 创建光源
(1)颜色
GLfloat light_ambient[] = { 0.0, 0.0, 1.0, 1.0 };
glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);
glLgihtfv(GL_LIGHT0,GL_DIFFUSE,lgiht_diffuse);
...
(2)位置
光源根据其位置分为两类,第一类是方向性光源,光线到达表面时,所有的光线都是平行的;第二类是位置性光源,在场景中的位置决定了它对于场景的效果
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
glLgihtfv(GL_LIGHT0, GL_POSITION, light_position);
light_position的4个值(x,y,z,w),若w为0.0, 则为方向性光源;若w为非0,则为位置性光源
对于位置性光源来说,存在着衰减因子。
(3)聚光灯
我们可以对位置性光源的形状加以限制,使它的发射范围限于一个锥体之内,就像聚光灯一样。
需要设置光锥的角度,聚光灯的方向,光锥的轴
光的强度在光锥的中心达到最高,靠近光锥的边缘,光的强度越弱
(4)多光源
我们至少可以指定8个光源
3. 材料属性
(1)散射和环境反射
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE,
mat_amb_diff);
环境颜色影响物体的整体颜色,物体被直接照亮时,散射颜色占据主要地位
(2)镜面反射
GLfloat mat_specular[] = {};
GLfloat low_shininess[] = { 50.0 };
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,low_shininess);
GL_SHINESS的值越大,亮点越小,更亮。
(3)发射光颜色
glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
(4)颜色材料模式
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_DIFFUSE);
glColor3f(0.2, 0.5, 0.8 );
glDisable(GL_COLOR_MATERIAL);
4. 光照模型
(1)全局环境光
GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
(2)局部观察点或无限远的观察点
(3)双面光照
glLightModeli(GL_LIGHT_MODEL_TWO_SIZE, GL_TRUE);
会反转背面的法线方向。
(4)镜面辅助颜色
完整的光照计算公式:
顶点颜色 = emission(material) + ambient(light model) *
ambient(material) +
衰减因子
* [ ambient(light) * ambient( material) +
(L*n) * diffuse(light) * diffuse( material) +
pow(
(s*n), shininess ) * specular(light) * specular( material) ]
(1)环境光:经过了充分散射,无法分辨其方向
(2)散射光:来自于某个方向,撞击表面时,均匀的向所有方向发散
(3)镜面光:来自于一个特定的方向,从特定方向反射,具有光泽的金属或塑料具有非常高的镜面成分
(4)发射光:模拟那些源自某个物体的光
Opengl的光照模型根据所反射的红蓝绿光的比例来模拟颜色。
对于光线而言,颜色成分的数量对应于某种颜色的完全强度的百分比,对于材料而言,它的RGB值和它对于这些颜色的反射比例相对应。
如对于光线,RGB都等于0.5,这种光线应该是灰色的。对于材料,若R=1,G=0.5,B=0,则表示反射所有入社红光,一半绿光,不反射蓝光。
2. 创建光源
(1)颜色
GLfloat light_ambient[] = { 0.0, 0.0, 1.0, 1.0 };
glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);
glLgihtfv(GL_LIGHT0,GL_DIFFUSE,lgiht_diffuse);
...
(2)位置
光源根据其位置分为两类,第一类是方向性光源,光线到达表面时,所有的光线都是平行的;第二类是位置性光源,在场景中的位置决定了它对于场景的效果
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
glLgihtfv(GL_LIGHT0, GL_POSITION, light_position);
light_position的4个值(x,y,z,w),若w为0.0, 则为方向性光源;若w为非0,则为位置性光源
对于位置性光源来说,存在着衰减因子。
(3)聚光灯
我们可以对位置性光源的形状加以限制,使它的发射范围限于一个锥体之内,就像聚光灯一样。
需要设置光锥的角度,聚光灯的方向,光锥的轴
光的强度在光锥的中心达到最高,靠近光锥的边缘,光的强度越弱
(4)多光源
我们至少可以指定8个光源
3. 材料属性
(1)散射和环境反射
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE,
mat_amb_diff);
环境颜色影响物体的整体颜色,物体被直接照亮时,散射颜色占据主要地位
(2)镜面反射
GLfloat mat_specular[] = {};
GLfloat low_shininess[] = { 50.0 };
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,low_shininess);
GL_SHINESS的值越大,亮点越小,更亮。
(3)发射光颜色
glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
(4)颜色材料模式
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_DIFFUSE);
glColor3f(0.2, 0.5, 0.8 );
glDisable(GL_COLOR_MATERIAL);
4. 光照模型
(1)全局环境光
GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
(2)局部观察点或无限远的观察点
(3)双面光照
glLightModeli(GL_LIGHT_MODEL_TWO_SIZE, GL_TRUE);
会反转背面的法线方向。
(4)镜面辅助颜色
完整的光照计算公式:
顶点颜色 = emission(material) + ambient(light model) *
ambient(material) +
衰减因子
* [ ambient(light) * ambient( material) +
(L*n) * diffuse(light) * diffuse( material) +
pow(
(s*n), shininess ) * specular(light) * specular( material) ]
相关文章推荐
- opengl光照模型
- OpenGL光照的计算模型
- 探究OpenGL光照模型的着色器实现
- OpenGL(七) 光照模型及设置
- Android OpenGL ES 开发教程(25):OpenGL光照模型
- OpenGL学习: 光照系列1-光照基础(phong模型)
- OpenGL-光照模型
- OpenGL光照模型
- OpenGL光源、材质和光照模型
- OpenGL.光照模型
- Android OpenGL ES 开发教程(25):OpenGL光照模型
- OpenGL光照模型--四种光照效果
- OpenGL(七) 光照模型及设置
- opengl光照模型
- OpenGL中的颜色、光照和材质(一)——OpenGL的光照模型
- SharpGL学习笔记(九) OpenGL的光照模型, 术语解释
- OpenGL中ADS光照模型没有镜面光照效果
- 9.OpenGL学习之光照模型
- RenderMonkey 练习 第二天 【opengl 光照模型】
- OpenGL光照模型--四种光照效果