自己的透视投影坐标变换(perspective projection)的推导过程理解

    以前对于投影变化部分都是直接填参数使用API获取投影矩阵,没有深入的去理解其中的原理,而最近的3D图形编程学习到了有关“拾取”和“视截体剔除(frustum culling)”的部分,需要逆向推导,在网上找代码copy下来运行成功后需要去理解源代码。dx的doc一直看总觉得写的很烂,而网上一堆关于投影变换的文章都讲的不是很含糊就是太罗嗦太难理解(至少对我来说是这样),以下是自己的一些理解,至少觉得看上去简单一点,提供给大家参考。


    首先,我从最终结果开始讨论,我们最终是需要将视截体中3D空间的坐标P(x, y, z)转换为投影坐标Pp(Xp, Yp, Zp),其中-1≤Xp, Yp, Zp≤1,如下图(YZ平面):


    这里要理解一点,AB是最终的投影平面,则|AO'| = |O'B| = 1,最终是需要求出的是Pp坐标中的Yp,就是要求Yp在O'A中所占的比例,则Xp也可同理求出。Zp的坐标的求法简单许多,后面介绍。Yp的求法如下图,最终求出来的Yp值就介于0和1之间:


就是1/2然后把3带入,就得到了最后的结果。同理可求出Xp。


下面求Zp,因为0≤Zp≤1,其实也就是要求出图中CE/DE的比值,这就简单了,CE/DE = (Z - Zn) / (Zf - Zn) ,其值最终也是介于0到1之间。

(X, Y, Z, 1), (未完待续 ... )




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值