文件名称:折射环境模拟-简易多波形信号发生器电路设计
文件大小:46.65MB
文件格式:PDF
更新时间:2024-07-31 10:03:56
OpenGL ES3x 游戏开发 下卷吴 亚峰pdf
4.2 折射环境模拟 说明 上述顶点着色器与实现普通纹理映射功能的顶点着色器最大的区别是,传递给 片元着色器的纹理坐标不是从管线接收并直接赋值给易变变量的二维向量,而是通 过视线及法向量计算出来的三维向量,代表视线经表面反射后的方向。 (7)完成了立方图纹理相关顶点着色器的开发后,就可以开发对应的片元着色器了,其代码 如下。 代码位置:源代码/第 4 章/Sample4_1/assets 目录下的 frag_tex_cube.sh。 1 #version 300 es 2 precision mediump float; //指定默认的浮点精度 3 uniform samplerCube sTexture; //纹理内容数据 4 in vec3 vTextureCoord; //接收从顶点着色器过来的参数 5 out vec4 fragColor; //输出到的片元颜色 6 void main() { 7 //通过传入的采样向量与立方图纹理调用 texture 方法执行采样 8 fragColor=texture(sTexture, vTextureCoord); 9 } 说明 从上述代码中可以看出,由于 OpenGL ES 3.0 着色语言内置函数的良好支持,得 到采样向量后的采样工作就非常简单了,直接调用 texture 函数即可完成。 提示 在 OpenGL ES 2.0 版本中立方图纹理采用的是线性过滤,当遇到边界时偶尔会 出现小的裂缝。升级到 OpenGL ES 3.0 后立方图纹理采样有了提升,在遇到边界时管 线实现了无缝过滤,使渲染出来的效果更好。 到这里为止,如何采用立方图纹理技术实现反射环境模拟就介绍完了,在以后的具体项目开 发中读者若能做到灵活运用,将可以开发出更加逼真的场景。 4.2 折射环境模拟 现实世界中很多场合都会有这样的情况,透过透明物体观察周围的环境时会有折射的现象。 平时使用的很多光学设备利用的就是光线的折射,例如放大镜、眼镜、望远镜、显微镜等。本节 将通过案例 Sample4_2 向读者介绍如何基于 OpenGL ES 3.0 来开发折射的效果。 4.2.1 案例效果与基本原理 介绍本案例的具体开发步骤之前首先需要了解案例的运行效果与基本原理,其运行效果如图 4-3 所示。 ▲图 4-3 折射环境纹理案例运行效果 从图 4-3 中可以看出,本节案例在自然场景中放置了一个透明的玻璃球,透过玻璃球观察后 面的场景时会有放大镜的效果。自然场景是用前面章节介绍过的天空盒技术实现的,玻璃球折射