OpenGL ES 3. 光照-环境光

大家好,接下来将为大家介绍OpenGL ES 3. 光照-环境光。

OpenGL ES 3.0 中采用的光照模型相对现实世界进行了很大的简化,将光照分成了 3 种组成元素(也可以称为 3 个通道),包括环境光、散射光 以及 镜面光。

1、环境光介绍

环环境光(Ambient)指的是从四面八方照射到物体上,全方位 360°都均均匀的光。其代表的是现实世界中从光源射出,经过多次反射后,各方向基本均匀的光。环境光最大的特点是不依于光源的位置,而且没有方向性。

环境光示意图如下图所示:

环环境光不但入射是均匀的,反射也是各向均匀的。用于计算环境光的数学模型非常简单,具体公式如下。
环境光照射结果 = 材质的反射系数 * 环境光强度。

2、在上一节“绘制球体”的基础上,进行环境光的渲染

#version 300 es
uniform mat4 uMVPMatrix; 
in vec3 aPosition;  
out vec3 vPosition;
out vec4 vAmbient; //环境光

void main()     
{                   
   gl_Position = uMVPMatrix * vec4(aPosition,1); 
   
   vPosition = aPosition;

   vAmbient = vec4(0.15,0.15,0.15,1.0); //将环境光强度传给片元着色器
}
 
 
 
#version 300 es
precision mediump float;
uniform float uR;
in vec2 mcLongLat;
in vec3 vPosition;
in vec4 vAmbient;
out vec4 fragColor;
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);
   }
 
   fragColor = vec4(color,0);

   fragColor = finalColor*vAmbient; //根据环境光强度计算最终片元颜色值
}     

3、渲染结果

由于环境光的照射效果与光源位置无关,故环境光源调节到不同位置效果都相同。另外,实际开发中环境光一般都设置得较弱,因此,仅用环境光照射的物体看起来并不是很清楚。

最后,欢迎大家一起交流学习:微信:liaosy666 ; QQ:2209115372 。

发布了35 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u010281924/article/details/105329136