结合透视投影变换,分析unity3d shader 中的 ComputeScreenPos这个内置函数

本文深入探讨Unity3D Shader中的ComputeScreenPos函数,解释了该函数如何处理透视投影变换,但未执行透视除法。通过分析代码和不等式变换,展示了从世界坐标到屏幕坐标的转换过程,同时提到了需要在后续的frag阶段进行透视除法以获取正确的屏幕坐标。
摘要由CSDN通过智能技术生成

最近开始深入计算机图形,第一次看到的是一个来自国外网站的透视投影的推导,依靠线性插值,对不等式进行变形,将世界坐标中的点,乘以相机矩阵,得到了在相机视椎体中的相机坐标位置,而相机坐标系也有一套很容易理解的推到公式,首先确定的是相机位置,和观察物体之间的向量,再根据uvn系统,向量叉乘,求出三条坐标系的对应的标准正交基,这一点比较的基础,,标准正交基也是一个列向量构成的正交矩阵。


到了视锥体中以后,又进行线性的不等式插值,将是椎体中的,x,y,z分别变换到cvv中的-1 到 1之间(注意,如果是-1.到1的话,则说明已经进行了透视除法,也就是最后一个w分量已经是1了,当然,真正硬件的透视除法并不是我们手动的控制,这个过程是不可以干预的,我之所以说这句话的意思,其实是想说说unity3d, shader中  把一个定点惊醒mpv变换后,得到的一个float4的这个值,其实还并没有进行透视除法,需要我们手动的去除以最后一个w分量,这也是在计算屏幕坐标(ComputeScreenPos这个函数,定义在unitycg.cginc中)的时候,我最开始理解的一个误区)

最开始对这个函数很是搞不懂,后来看了几篇文章以后,也是博主自己的见解,并没有结合透视除法的整个过程,来分析这个函数到底干了一件什么事情。

最后才发现,这个函数其实已经做好了透视投影变化,但并没有做透视除法,也就是它到目前为止,完成了这样一个过程:将顶点从世界坐标变化到了相机坐标,相机坐标做了透视投影,变换到了裁剪坐标系中的,cvv中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值