绘制PointPlacemarks的顺序

有没有办法在World Wind中修复PointPlacemarks的绘制顺序?

即使在地标示例中,地标B和音频地标的排序也可以通过在特定缩放级别移动鼠标来改变:

在此处输入图像描述

在此处输入图像描述

到目前为止,我尝试过:

  • 将PointPlacemarks添加到单独的图层
  • 使用RenderableLayer.setRenderables而不是RenderableLayer.addRenderable
  • World Wind论坛上的相关问题

Hacky解决方案 (需要修改World Wind源代码)

gov.nasa.worldwind.render.DrawContextImpl更改orderedRenderables

 protected PriorityQueue orderedRenderables = new PriorityQueue(100, new Comparator() { public int compare(OrderedRenderableEntry orA, OrderedRenderableEntry orB) { double eA = orA.distanceFromEye; double eB = orB.distanceFromEye; return eA > eB ? -1 : eA == eB ? (orA.time < orB.time ? -1 : orA.time == orB.time ? 0 : 1) : 1; } }); 

 protected Queue orderedRenderables = new ArrayDeque<>(); 

(或修改比较器以做你想要的)。 这将修复绘图顺序。

备用解决方案 (不需要修改World Wind源代码)

扩展PointPlacemark并覆盖makeOrderedRenderable()

 public class OrderedPointPlacemark extends PointPlacemark { public OrderedPointPlacemark(Position position) { super(position); } @Override protected void makeOrderedRenderable(DrawContext dc) { super.makeOrderedRenderable(dc); if (this.intersectsFrustum(dc) || this.isDrawLine(dc)) { dc.pollOrderedRenderables(); dc.addOrderedSurfaceRenderable(this); } } }