倒影是在自然界中非常常见的一种现象,例如水面倒影、镜子。我们都知道,眼睛之所以能够看到某个物体,是因为物体本身能够发光或者物体能够反射其它的物体所发的光,这些光进入到我们的眼里就形成了该物体影像。倒影形成也是一种光学的现象,其原理是物体发射或者反射的光经过倒影平面的反射后进入到我们的眼里,我们所看到的在倒影平面形成的虚像就是该物体的倒影。
![bec404847c6376b0492c4a5e5d5c8c1a.png](https://img-blog.csdnimg.cn/img_convert/bec404847c6376b0492c4a5e5d5c8c1a.png)
![4bc7fb99daa89c3c9b40a18f468b94b1.png](https://img-blog.csdnimg.cn/img_convert/4bc7fb99daa89c3c9b40a18f468b94b1.png)
不管是做数据可视化还是游戏,我们经常需要在3D场景中来实现这种自然现象,给水面、镜面等物体增加倒影的效果,来提高视觉效果。那么在3D渲染中这种效果是怎么实现的那?WebGL的渲染引擎threejs给我们提供了一个很好的倒影实现的封装,通过对threejs提供的代码进行分析,希望能够和大家一起学习一下。
大概的思路是:构建一个虚拟的相机对需要倒影的物体进行渲染,然后将渲染的结果当作纹理映射到倒影平面上,这样就可以实现倒影的效果了。这里面我们需要解决两个问题,第一个是如何构建这个虚拟的相机,第二个是怎么将通过纹理相机渲染出来的结果正确的映射到倒影平面上。
使用threejs来实