简单的说,视景体裁剪发生在透视投影之后,透视除法之前,所以不会发生你说的错误。
另外纠正一个说法,透视投影是把向量投影到裁剪空间,而不是所谓的“投影平面上”。
复杂的说:
如果显卡是你做的,你想怎么裁剪都可以,在透视除法之前的任何阶段裁剪都可以,用普通高中生的解析几何都行。
但是,有一种公认比较简单的裁剪方法:
设原有向量
,投影矩阵
,
投影后为
,此时
在裁剪空间,
注意,裁剪发生在这时,而不是透视除法之后。
此时,不符合
,的
顶点为在视景体外的点,
这种点被去掉,再通过与没有被去掉的点插值得到新顶点,组成新的三角形即可。
作者:徐行
链接:https://www.zhihu.com/question/41291685/answer/90402808
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
另外纠正一个说法,透视投影是把向量投影到裁剪空间,而不是所谓的“投影平面上”。
复杂的说:
如果显卡是你做的,你想怎么裁剪都可以,在透视除法之前的任何阶段裁剪都可以,用普通高中生的解析几何都行。
但是,有一种公认比较简单的裁剪方法:
设原有向量
![\nu](https://i-blog.csdnimg.cn/blog_migrate/71fcf20a20c8975ec857a8679d072a35.png)
投影后为
![\nu'](https://i-blog.csdnimg.cn/blog_migrate/a672429c6d3e0160df481eee5c107959.png)
![\nu'](https://i-blog.csdnimg.cn/blog_migrate/a672429c6d3e0160df481eee5c107959.png)
注意,裁剪发生在这时,而不是透视除法之后。
此时,不符合
这种点被去掉,再通过与没有被去掉的点插值得到新顶点,组成新的三角形即可。
可以发现,在这个时候,
与否,对裁剪不会造成影响,也不会出现你所说的
时造成除法出错,因为
(也就是
)没有出现在任何分式下面。
之后,才会进行透视除法,而这之后,你说的
的顶点,早已被裁剪掉,根本不会出现所谓的“错误顶点”。
科普时间:
为什么说
可以判断哪些点在视景体外?
因为经过透视除法后
,
而上面的条件可以变形为
,
而经过投影和透视除法后的视景体,就是一个长宽为2,深度为1的方盒子,所以不符合上述条件的顶点在视景体外。
嘲讽时间:
我不是针对你,我是说在座的各位,你们图形学及格了吗?
![z\leq 0](https://i-blog.csdnimg.cn/blog_migrate/a16d2556c468b4bdea003b85893d5c9e.png)
![z\leq 0](https://i-blog.csdnimg.cn/blog_migrate/a16d2556c468b4bdea003b85893d5c9e.png)
![z](https://i-blog.csdnimg.cn/blog_migrate/827b04aa867b324339dfe2ac48f1dc25.png)
![w'](https://i-blog.csdnimg.cn/blog_migrate/c69b54b578463b1b4f7900c37d9bda12.png)
之后,才会进行透视除法,而这之后,你说的
![z\leq 0](https://i-blog.csdnimg.cn/blog_migrate/a16d2556c468b4bdea003b85893d5c9e.png)
科普时间:
为什么说
因为经过透视除法后
而上面的条件可以变形为
而经过投影和透视除法后的视景体,就是一个长宽为2,深度为1的方盒子,所以不符合上述条件的顶点在视景体外。
嘲讽时间:
我不是针对你,我是说在座的各位,你们图形学及格了吗?
链接:https://www.zhihu.com/question/41291685/answer/90402808
来源:知乎
著作权归作者所有,转载请联系作者获得授权。