Cesium实现镜面反射

反射原理

平面反射是光线与平坦表面相交并按照规律反射的现象。根据光的反射定律,入射光线与表面的法线形成的角度(入射角)等于反射光线与法线形成的角度(反射角)。平面反射遵循以下原理:

  1. 入射光线:当光线照射到平坦表面时,光线沿着特定方向传播并击中表面。
  2. 法线:平坦表面上的法线是垂直于表面的线,垂直于入射点。
  3. 入射角:入射角是入射光线与法线之间的角度,通常用θi表示。
  4. 反射角:反射角是反射光线与法线之间的角度,通常用θr表示。
  5. 反射定律:根据反射定律,入射角等于反射角,即θi = θr。
  6. 反射光线:根据反射定律,光线以与入射角相等但相对于法线相反的角度反射。

平面反射的原理可应用于多个领域和应用中,包括光学、镜面反射、计算机图形学等。在镜面反射中,通过使用适当的材质和表面属性,可以实现高度反射的表面,从而产生清晰、镜面般的反射效果。这在现实世界中的镜子、玻璃、水面等场景中经常出现,并被广泛用于计算机图形学中的实时渲染和可视化技术中,以增强逼真度和视觉效果。

平面反射原理

img

Cesium中实现平面反射

参考文章

Cesium中实现水面反射

UPR平面反射

实现思路

  • 计算反射相机
    • 与当前相机相对于水面,呈镜面对称的相机
  • 从反射相机的角度绘制一张纹理图
  • 获取反射相机纹理图对应的UV坐标
    • 在反射相机的MVP矩阵的V之前乘以反射矩阵R,即得到MRVP,将物体的点变换到关于世界空间中的平面的镜像点
    • 最后转换到镜像相机的齐次裁剪空间中即可。随后使用齐次裁剪空间中的xy作为uv来采样镜像相机渲染出的结果
  • 渲染镜像相机得到RenderTexture并投影到平面的材质shader,在shader中计算上一步投影坐标UV,把反射纹理作为水面网格的纹理

最终效果

posted @ 2023-02-05 18:45  百年内必成大牛  阅读(334)  评论(0编辑  收藏  举报