【发布时间】:2015-08-24 20:46:35
【问题描述】:
我正在处理一些渲染图形,我有一个这样的模型,我正在使用 Java 画布工具和窗口化,否则是独立编写的。
所有部分都是矩形多边形或线段。正如在这个模型中发生的那样,所有多边形部分都与 x、y 或 z 平面对齐,xy 原点从图片中模型的前角延伸。 (可以通过仔细观察它们如何拼凑在一起来辨别边的矩形细分 - 但是这里没有解决这个伪影)
我还没有想出一种获得干净深度排序的技术,这个是基于最远顶点的。我尝试了一些幼稚的技术,它们都有各种工件。我注意到二进制空间分区和纽厄尔算法没有深入研究,但感觉在这种情况下应该有一种更简单的方法,特别是在所有部分都正确对齐并平行于轴的情况下。任何有关它的方法的提示都表示赞赏
更新
我想出了这个想法,可能会有用处
给定平面约束,有 6 种可能的关系,(x-x 平面)、(x-y 平面)、(x-z 平面)、(y-y 平面)、(y-z 平面)和(z-z 平面)。
如果两个多边形共享同一个平面,很容易对它们进行排序,其他3种组合如上所示(xy on xz),(xy on yz)和(xz on 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)
P1 或 P2 必须位于前两个平面之一,所以对于问题陈述应该足够了,需要确认这种方法是否有效
更新2
我在上面的想法上取得了一些进展,似乎对多边形匹配进行排序正在做一些有趣的事情,它一直在部分工作,我会说它看起来很容易,但是,......好吧,我希望你认为它是并且可以告诉我我需要做什么。
沿着上面的线,首先与我的假设相反,同一平面上的多边形不是微不足道的,它们可以有几种不同的配置,如下所示;平行且不共享另一个轴,例如前两个轴,或平行且在同一平面上。这有时意味着他们并不关心他们在哪个轴上排序(用于成对比较),(并且谈到了这种追求的更深层次的一面)。
无论如何设置一系列条件语句,类似于上面的建议,它具有蛮力的味道,带有大量的“if-else”,我想最终我找到了一个正确的成对多边形到多边形比较,因此在这个概念中,可以肯定地说主体或另一个是否更接近。
在这里处理模型的单面,设法产生了看起来非常有说服力的东西。这个过程总体上感觉接近锁定,但试图摆脱一些最终的错位以某种方式挑衅,因为固定一侧的旧物理琐事总是被打破。
【问题讨论】:
-
您是要相对于相机方向还是仅三个轴之一进行排序?
-
考虑 3 个三角形,每个三角形的顶角都高于另一个三角形的宽部分。易于可视化,但只有深度缓冲区才能将其分类:) 也就是说,对于您的受限情况可能只有一个解决方案。
-
我想相对于相机,如上图所示,我使用的是焦点 A,通常是原点,以及一个可移动的相机,矢量 C。我在想,但没有t 得出了一种方法,如果相机位于 8 个 xyz 八分圆中,则平面将优先沿 +ive 或 -ive 轴中的每一个轴,对这些轴中的任何一个进行排序通常会给出合理的结果,但并不完全干净,到目前为止
-
您对深度排序有何期望?你想要一个(排序的)你的对象列表。每个对象都没有被以前的对象隐藏?那么第一个问题是:在你的情况下这在理论上是可能的吗? (见 Jongware 的评论)下一个问题是:全局排序可以在本地决定吗? (即:给定两个对象:你能独立于其他对象来决定它们的关系吗?)如果两个答案都是“是”,那么你需要一个简单的规则/算法来决定两个对象的关系,对吧?
-
@coproc 嗯,是的,我正在寻找一个清晰的视觉排序,我想从某些给定的角度来看,一个明确的交互排序是理想的。如果我理解 Jongware,在我的情况下没有三个多边形是交错的并且无法排序,我认为这个假设适用于所有元素,是否可以定义一个明确的总排序,我不知道,如果你可以证明它不是肯定值得的......