OpenGL光线
一、OpenGL光照系统
OpenGL光照系统分为3部分:光源、材质、光照环境
- 光源-光的来源
//TODO:插入图片讲解
光的来源可以是太阳、电灯等
- 材质-接受光照物体的表面
物体的表面决定了物体反射光线的特点
//TODO:插入图片讲解
- 光照环境-包括了一些额外的参数
//光照环境的参数等以后再列出来,现在还不清楚
//TODO:插入图片讲解
顶点颜色计算
- 顶点颜色计算公式
公式中的变量说明:
emission_material:物体发射光(对应OpenGL属性为:GL_EMISSION)
ambient_material:反射(光线的ambient成分)系数
diffuse_material:反射(光线的diffuse成分)系数
specular_material:反射(光线的specular成分)系数
shininess:物体表面的镜面反射指数(对应OpenGL属性为:GL_SHININESS)
ambient_lightmodel:全局环境光线强度(对应OpenGL属性为:GL_LIGHT_MODEL_AMBIENT)
k_c:位置光源的常量衰减系数(对应OpenGL属性为:GL_CONSTANT_ATTENUATION)
k_l:位置光源的线性衰减系数(对应OpenGL属性为:GL_LINEAR_ATTENUATION)
k_q:位置光源的二次方衰减系数(对应OpenGL属性为:GL_QUADRATIC_ATTENUATION)
ambient_light:光线的ambient成分
diffuse_light:光线的diffuse成分
specular_light:光线的specular成分
l:视线方向
n:顶点的法线方向
s:入射光方向
spotlight effect://TODO:暂时不知道,以后补上
注意事项://TODO:如果使用了glEnable(GL_LIGHTING);,则此处glColor3f()设置的颜色无效,Fuck,我不知道为什么.写在这里提醒一下自己
二、控制光照系统
- 控制光源
OpenGL支持至少8个光源(名字分别是:GL_LIGHT0-GL_LIGHT7)
每个光源都有如下10个属性:
(1)GL_AMBIENT
(2)GL_DIFFUSE
(3)GL_SPECULAR
(4)GL_POSITION
(5)GL_SPOT_DIRECTION
(6)GL_SPOT_EXPONENT
(7)GL_SPOT_CUTOFF
(8)GL_CONSTANT_ATTENUATION
(9)GL_LINEAR_ATTENUATION
(10)GL_QUADRATIC_ATTENUATION
- 控制材质
每个物体的材质都有如下7个属性
(1)GL_AMBIENT
(2)GL_DIFFUSE
(3)GL_AMBIENT_DIFFUSE
(4)GL_SPECULAR
(5)GL_SHININESS
(6)GL_EMISSION
(7)GL_COLOR_INDEX
- 控制光照环境
光照环境有如下3个属性
(1)GL_LIGHT_MODEL_AMBIENT
(2)GL_LIGHT_MODEL_LOCAL_VIEWER
(3)GL_LIGHT_MODEL_TWO_SIDE
三、代码示例
//TODO:我会将代码一点一点添加用于说明以上概念,请耐心等待
浙公网安备 33010602011771号