【图形与渲染】相机平面镜反射与斜裁剪矩阵(下)-斜裁剪矩阵

本文深入探讨了在图形渲染中,如何处理相机平面镜反射的问题,特别是如何通过计算斜裁剪矩阵来解决视锥体裁剪范围的调整。通过分析投影矩阵和近远裁面的转换,提出了使用平面P替换近裁面,并通过调整远裁面,确保在不裁剪原视锥体的同时,使近远裁面夹角最小。在Unity中,可通过CalculateObliqueMatrix API直接计算斜裁剪矩阵,实现镜面反射效果。
摘要由CSDN通过智能技术生成

上一篇文章分析了平面镜反射效果实现中,如何计算镜像矩阵,我们已经可以得到镜像相机并渲染出镜像后的效果了,但是只是纯粹的镜像会遇到以下问题:


如图,当相机镜像到C’位置后,其视锥体裁剪范围是A+B,但实际应该位于反射贴图中的区域仅仅只有A区域,也就是我们需要根据平面P对相机C’裁剪。


投影矩阵:

先回顾一下渲染管线中的投影变换阶段,该阶段将相机空间的坐标变换到投影空间,以便于裁剪。

投影变换后会得到一个归一化设备坐标(NDC),其值在视锥体内的范围分别是x:[-1,1],y[-1,1],z:[-1,1](Direct3D中是[0,1],OpenGL中是[-1,1],unity采用了OpenGL的NDC)


投影矩阵可以通过相机的相关参数计算得到:

透视投影:

| 1/(tan(fov/2)*aspect) 0 0 0|

|0 1/tan(fov/2) 0 0|

|0 0 -(far+near)/(far-near) -2*near*far/(far-near)|

|0 0 -1 0|


正交投影:

|1/(aspect*size) 0 0 0|

|0 1/size 0 0|

|0 0 -2/(far-near) -(far+near)/(far-near)|

|0 0 0 1|


投影矩阵的详细推导可以参考相关文章,这里限于篇幅只给出具体的公式以方便下面的计算。

投影矩阵的推导:http://www.songho.ca/opengl/gl_projectionmatrix.html


近裁面和远裁面:

相机的视锥体由六个平面围成,其每个平面都可以用投影矩阵中的分量计算得到,但对于我们要实现的镜面反射效果,最重要的就是近裁面和远裁面,因此这里只考虑这两个平面。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值