深度排序矩形多边形,模型轴的所有部分都面向

Rob*_*off 11 algorithm 3d graphics

我正在研究一些渲染图形,我有一个这样的模型,我正在使用Java画布工具和窗口,否则独立编写.

3d框架模型

所有零件都是矩形多边形或线段.正如在此模型中发生的那样,所有多边形部分都与x,y或z平面对齐,xy原点从图片中模型的前角开始运行.(可以通过仔细观察它们看起来如何拼接在一起来辨别侧面的矩形细分 - 但是这里没有解决这个神器的问题)

我还没有找到一种获得干净深度排序的技术,这个技术基于最远的顶点.我尝试了一些天真的技术,他们都有各种各样的文物.我注意到二进制空间分区和Newell的算法没有钻研,但有一种感觉,在这种情况下应该有一个更简单的方法,特别是在所有部件都是正确对齐并平行于轴的条件下.关于它的方法的任何提示赞赏

更新

我想出了这个可能会有所改变的想法

矩形多边形的比较

给定平面面对约束,存在6种可能的关系,(xx平面),(xy平面),(xz平面),(yy平面),(yz平面)和(zz平面).

如果两个多边形共享同一平面很容易排序,其他3个组合如上图所示(xy在xz上),(xy在yz上)和(xz在yz上),可能出现不同的深度顺序.

鉴于P1 = polygon1和P2 = polygon2,我认为我的比较条件可能是这样的

if (P1 == xy_plane) return min(P1.z, P2.z)
if (P2 == xy_plane) return min(P2.z, P1.z)
if (P1 == xz_plane) return min(P1.y, P2.y)
if (P2 == xz_plane) return min(P2.y, P1.y)
Run Code Online (Sandbox Code Playgroud)

P1或P2必须位于前两个平面之一,因此对于问题陈述应该足够,需要确认这种方法是否有效

UPDATE2

我在上面的想法上取得了一些进展,看起来多边形匹配的排序正在做一些有趣的事情,它已经部分工作了,我说它看起来很简单,但是,......好吧,我希望你认为它是可以的告诉我我需要做什么.

沿着上面的路线,首先与我的假设相反,同一平面上的多边形不是微不足道的,它们可以有几种不同的配置; 平行且不共享另一个轴,例如在前两个轴中,或平行且在同一平面上.这有时意味着他们不关心他们排序的轴(用于成对比较),(并且说明了这种追求的更深层次).

多边形在同一平面上

设置一系列条件语句,不管是什么,与上面的建议一致,具有蛮力的味道和一系列广泛的"if-else",我想我最终找到了一个正确的成对多边形到多边形比较因此,在这个概念中,如果主体或其他主体更接近,则可以肯定地说出来.

在这里模拟模型的一个方面,设法产生看起来非常有说服力的东西.整个过程总体感觉接近锁定,但试图摆脱一些最终的错位以某种方式挑衅,因为旧的物理trivias固定一方另一方总是被打破.

在此输入图像描述

cop*_*roc 6

让我补充一些意见:

条件是

  • 所有多边形边都与轴平行
  • 多边形不相交

不足以确保多边形的全局深度排序的存在 - 正如这个三个矩形的例子所示:

深度交错

此外,两个对象的相对深度顺序可以依赖于其他对象,如在这个2D示例中可以看到的,其中对象A和B的深度顺序(彼此不相互隐藏)取决于对象C的位置:

在此输入图像描述

因此,对对象进行全局深度排序似乎不是可行的方法.