我们首先讨论一下基本的光照模型
在数学上描述基本模型的高级公式如下所示:
在数学上描述基本模型的高级公式如下所示:
surfaceColor = emissive + ambient + diffuse + specular
1. emissive ( 放射项 )
放射项表示了由表面所发出的光.
下面是我们用于放射项的数学公式
emissive = Ke
其中:
Ke代表材质的发射光的颜色.
放射项表示了由表面所发出的光.
下面是我们用于放射项的数学公式
emissive = Ke
其中:
Ke代表材质的发射光的颜色.
2. ambient (环境反射项 )
环境反射项代表了光在一个场景里经过多次折射后看起来就像来自四面八方一样.
下面是我们用于环境反射项的数学公式(用CG语言表示):
ambient = Ka * globalAmbient;
环境反射项代表了光在一个场景里经过多次折射后看起来就像来自四面八方一样.
下面是我们用于环境反射项的数学公式(用CG语言表示):
ambient = Ka * globalAmbient;
3. diffuse (漫反射项)
慢反射项代表了从一个表面相等地向所有方向射出去的方向光.
下面我们用来计算漫反射项的数学公式(用CG语言表示)
diffuse = Kd * lightColor * max(dot(N, L), 0);
N表示法线方向
L表示此顶点指向光源的向量.
慢反射项代表了从一个表面相等地向所有方向射出去的方向光.
下面我们用来计算漫反射项的数学公式(用CG语言表示)
diffuse = Kd * lightColor * max(dot(N, L), 0);
N表示法线方向
L表示此顶点指向光源的向量.
4.(specular) 镜面反射项
镜面反射项代表了从一个表面主要的反射方向附近被反射的光.
下面是我们用来计算镜面反射的数学公式(用CG语言表示)
float3 V = normalize(eyePosition - P);
float3 H = normalize(L + V);
float specularLight = pow(max(dot(N, H), 0), shininess);
if(diffuseLight <= 0) specularLight = 0;
float3 specular = Ks * lightColor * specularLight;
Ks是材质的镜面反射颜色
lightColor是入射镜面的反射光的颜色
N是规范化的表面法向量
V是指向视点的规范化向量
L是指向光源的规范化法向量
H是V和L的中间向量的规范化向量
P是要作色的点
facing是1如果DOT(N,L)是大于0的, 否则为0
镜面反射项代表了从一个表面主要的反射方向附近被反射的光.
下面是我们用来计算镜面反射的数学公式(用CG语言表示)
float3 V = normalize(eyePosition - P);
float3 H = normalize(L + V);
float specularLight = pow(max(dot(N, H), 0), shininess);
if(diffuseLight <= 0) specularLight = 0;
float3 specular = Ks * lightColor * specularLight;
Ks是材质的镜面反射颜色
lightColor是入射镜面的反射光的颜色
N是规范化的表面法向量
V是指向视点的规范化向量
L是指向光源的规范化法向量
H是V和L的中间向量的规范化向量
P是要作色的点
facing是1如果DOT(N,L)是大于0的, 否则为0