-
PT100转换表-基本光照效
资源介绍
6.2 基本光照效果
其具体代码如下。
代码位置:见随书中源代码/第 6 章/Sample6_1/assets 目录下的 frag.sh。
1 #version 300 es
2 precision mediump float;
3 uniform float uR; //从宿主程序中传入的球半径
4 in vec2 mcLongLat; //接收从顶点着色器过来的参数
5 in vec3 vPosition; //接收从顶点着色器过来的顶点位置
6 out vec4 fragColor; //输出的片元颜色
7 void main(){
8 vec3 color;
9 float n = 8.0; //外接立方体每个坐标轴方向切分的份数
10 float span = 2.0*uR/n; //每一份的尺寸(小方块的边长)
11 int i = int((vPosition.x + uR)/span); //当前片元位置小方块的行数
12 int j = int((vPosition.y + uR)/span); //当前片元位置小方块的层数
13 int k = int((vPosition.z + uR)/span); //当前片元位置小方块的列数
14 //计算当前片元行数、层数、列数的和并对 2 取模,用于确定当前片元的颜色
15 int whichColor = int(mod(float(i+j+k),2.0));
16 if(whichColor == 1) { //奇数时为红色
17 color = vec3(0.678,0.231,0.129); //红色
18 }else { //偶数时为白色
19 color = vec3(1.0,1.0,1.0); //白色
20 }
21 fragColor=vec4(color,0); //将计算出的颜色传递给管线
22 }
说明
上述片元着色器实现了如前一小节图 6-4 所示的棋盘着色器,其根据片元的位置
计算出片元所在小方块的行数、层数、列数,再根据 3 个数之和的奇偶性确定片元
所采用的颜色。
6.2 基本光照效果
完成了上一节中球体的开发后,下面的部分将基于此球体逐步介绍光照各个方面的知识。具体
计划为,首先介绍 OpenGL ES 3.0 中光照模型的基本知识,然后逐步为球体添加不同的光照效果。
6.2.1 光照的基本模型
如果要用一个数学模型完全真实地描述现实世界中的光照是很难的,一方面数学模型本身可
能太过复杂,另一方面复杂的模型可能导致巨大的计
算量。因此,OpenGL ES 3.0 中采用的光照模型相对
现实世界进行了很大的简化,将光照分成了 3 种组成
元素(也可以称为 3 个通道),包括环境光、散射光
以及镜面光,具体情况如图 6-5 所示。
提示
实际开发中,3 个光照通道是分别采用不同的数学模型独立计算的,下面的几个
小节将一一进行详细介绍。
6.2.2 环境光
环境光(Ambient)指的是从四面八方照射到物体上,全方位 360°都均匀的光。其代表的是
现实世界中从光源射出,经过多次反射后,各方向基本均匀的光。环境光最大的特点是不依赖于
光源的位置,而且没有方向性,图 6-6 简单地说明了这个问题。
▲图 6-5 光的 3 个通道
- 上一篇: 多边形偏移-pt100换算表
- 下一篇: Dxva2解码渲染Demo