在哪个空间做可见表面测定又如何?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在哪个空间做可见表面测定又如何?相关的知识,希望对你有一定的参考价值。

可见性问题可以通过深度排序多边形(Painter算法)来解决,并且在z范围重叠的情况下支持Newell算法。纽厄尔的算法被解释为herehere。第3点和第4点涉及将polygon1的每个顶点与polygon2的平面进行比较。

为了得到正确的结果,我们应该在剪切后进行比较(因为剪切后的多边形可能会改变为完全位于另一个多边形平面与视点的相对侧)。在投影之后进行剪切(因为投影矩阵定义了截头锥体以进行剪裁),这意味着我们必须在投影之后将顶点与平面进行比较。

此外,我们必须将矢量归一化,因为投影空间中的x,y和z值仅适用于它们自己的w的上下文中。

归一化后,我们不再具有线性深度,这意味着如果将它们移近远平面,则两个多边形的z值会变得更近。计算法线,点平面距离或检测点的平面哪一侧所需的任何东西都将在非线性深度空间中失败。

那么,如何执行“P的所有顶点是否比Q平面更深”?

答案

在将问题缩小到“如何将剪切的多边形返回到可以计算其法线向量的空间(意味着世界空间或眼睛空间)”之后,我看到了一种方法:我们需要反转我们的管道操作,描述here

为了避免从窗口空间回到剪辑空间的非平凡数学,我们可以在沿着管道向下缓存剪辑坐标。然后我们只需要用投影矩阵的逆变换剪辑坐标。然后,剪切的坐标将在眼睛空间中,并且我们能够进行顶点 - 平面比较(例如,通过平面到矢量法线和参考矢量的点积或测试,如果存在线(光线) - 平面交叉点)并完成我们的VSD操作。

如果我们正在进行光照计算(在眼睛空间中),我们可能已经有了法向量。在将法向量向下转换到管道(例如,从对象空间到世界空间)时要记住的一件事是使用矩阵的转置逆,因此法向量不会在任何方向上平移。

以上是关于在哪个空间做可见表面测定又如何?的主要内容,如果未能解决你的问题,请参考以下文章

如何去掉隐身对其可见的那个眼睛图标

消隐算法

Leanback 传输控件覆盖是不可见的还是在视频表面后面?

如何覆盖包命名空间中的不可见函数?

您如何使基础架构代码仅在命名空间中可见?

算法:基于opengl 点云模型不可见点(隐藏点)的移除 最后一步搞不定了 分不是问题