如何确定应该绘制矢量3D形状的顺序

时间:2016-05-30 03:05:53

标签: java algorithm 3d geometry polygons

我发现了一个类似于我的问题(无法链接它,因为我需要10个声誉来发布两个以上的链接),但是这让我感到困惑,因为我只是Java的初学者。

到目前为止,我已经制作了一个程序,可以显示三维地图平面并在其上绘制三维棱镜,可以使用三角法和g.fillPolygon方法在两个轴上旋转,但我无法想象一个算法,以确定应该绘制每个形状的顺序,以防止某些形状在其他不应该的位置上绘制。

An example of objects being drawn in the wrong order

以错误顺序绘制对象的示例

我当前的算法从左到右对角地迭代,从距离观察者视角最远的地图点开始,并检查所绘制的任何形状是否具有与给定点相对应的后角。 / p>

但这有一些问题,因为任何包含两个或更多形状的迭代通常都会导致绘制问题,例如帖子开头的示例中的问题。

How my algorithm works, and example of when it fails

我的算法如何工作,以及何时失败的例子

我对编码和使用数学方式相当陌生,所以我很乐意相对简单地解释这个概念。另外,如果我在解释中遗漏了任何内容,我会记录我的程序here的简短演示 - 希望这有助于清理我错过的任何内容。

更新:我(我想)我明白了。对于在同一迭代线上绘制的所有形状,我根据左边的形状是否有一个指向最远点的右边的点(具有更大的x / y值(取决于地图的方向))来对它们进行排序。形状最右边的点。

1 个答案:

答案 0 :(得分:0)

如果你有两个形状,你可以通过找到它们在屏幕上重叠的区域的中间位置并在那里采样到相机的距离来找出应首先绘制的形状(不一定是中间的) ,可以只是与间隔结束充分不同的一点)。对于凸形2D形状(这似乎是您正在使用的形状),这应该是可靠的。排序整个列表时,请注意,如果任何两个形状不重叠,它们之间的关系是“未定义的”,因此排序算法所暗示的传递规则都不适用,因此您可能必须找到“岛屿”重叠形状并仅根据现有重叠对它们进行排序。