1. 光照基本模型
在OpenGL ES 2.X中采用的光照模型(通道)分3种:环境光、散射光和镜面光。
1.1 环境光
环境光(Ambient)指的是从四面八方照射到物体上,全方位360°都均匀的光。
数学模型公式:
环境光照射结果 = 材质的反射系数 ∗ 环境光强度 环境光照射结果=材质的反射系数*环境光强度 环境光照射结果=材质的反射系数∗环境光强度
环境光下顶点着色器和片元着色器完整代码:
vertex.sh
uniform mat4 uMVPMatrix;//总变换矩阵
attribute vec3 aPosition;//顶点位置
varying vec3 vPosition;//传递给片元着色器的的顶点位置
varying vec4 vAmbient;//传递给片元着色器的环境光分量
void main(){
gl_Position = uMVPMatrix * vec4(aPosition,1);
vPosition = aPosition;
vAmbient = vec4(0.15,0.15,0.15,1.0);
}
frag.sh
precision mediump float;
uniform float uR;//球半径
varying vec3 vPosition;//顶点着色器传递过来的
varying vec4 vAmbient;//顶点着色器传递过来的环境光强度
void main(){
vec3 color;
float n = 8.0;
float span = 2.0*uR/n;
int i = int((vPosition.x + uR)/span);
int j = int((vPosition.y + uR)/span);
int k = int((vPosition.z + uR)/span);
int whichColor = int(mod(float(i+j+k),2.0));
if(whichColor==1){
color = vec3(0.678,0.231,0.129);
}else{
color = vec3(1.0,1.0,1.0);
}
vec4 finalColor = vec4(color,0);
gl_FragColor = finalColor * vAmbient;
}
【环境光说明】
- 环境光没有方向性;
- 环境光的照射效果与光源位置无关(看下面的GIF图);
- 实际开发中环境光强度一般设置较弱;