简单的透视投影

154 篇文章 8 订阅
简单的说,视景体裁剪发生在透视投影之后,透视除法之前,所以不会发生你说的错误。

另外纠正一个说法,透视投影是把向量投影到裁剪空间,而不是所谓的“投影平面上”。


复杂的说:

如果显卡是你做的,你想怎么裁剪都可以,在透视除法之前的任何阶段裁剪都可以,用普通高中生的解析几何都行。

但是,有一种公认比较简单的裁剪方法:


设原有向量 \nu \left( x,y,z,1\right) ,投影矩阵 \left(\begin{array}{cccc}w & 0 & 0 & 0 \\0 & h & 0 & 0 \\0 & 0 & Q & 1 \\0 & 0 & -QZ_n & 0\end{array}\right)


投影后为 \nu' \left( x', y', z', w' \right) =\left(xw, yh, Qz-QZ_n, z \right) ,此时 \nu' 在裁剪空间,

注意,裁剪发生在这时,而不是透视除法之后。

此时,不符合 \left\{\begin{array}{ccc}-w' < x' < w' \\\\-w' < y' < w' \\\\0 < z' < w' \\\end{array}\right. ,的 顶点为在视景体外的点,

这种点被去掉,再通过与没有被去掉的点插值得到新顶点,组成新的三角形即可。

可以发现,在这个时候,z\leq 0与否,对裁剪不会造成影响,也不会出现你所说的z\leq 0时造成除法出错,因为z(也就是w')没有出现在任何分式下面。

之后,才会进行透视除法,而这之后,你说的z\leq 0的顶点,早已被裁剪掉,根本不会出现所谓的“错误顶点”。


科普时间:

为什么说 \left\{\begin{array}{ccc}-w' < x' < w' \\\\-w' < y' < w' \\\\0 < z' < w' \\\end{array}\right. 可以判断哪些点在视景体外?

因为经过透视除法后 v''=\left(\frac{x'}{w'}, \frac{y'}{w'}, \frac{z'}{w'}, 1\right)

而上面的条件可以变形为 \left\{\begin{array}{c}-1< \frac{x'}{w'} < 1\\\\ -1< \frac{y'}{w'} < 1\\\\0< \frac{z'}{w'} < 1\\\\\end{array}\right.

而经过投影和透视除法后的视景体,就是一个长宽为2,深度为1的方盒子,所以不符合上述条件的顶点在视景体外。

嘲讽时间:

我不是针对你,我是说在座的各位,你们图形学及格了吗?


作者:徐行
链接:https://www.zhihu.com/question/41291685/answer/90402808
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值