【问题标题】:Draw order of PointPlacemarksPointPlacemarks 的绘制顺序
【发布时间】:2015-10-04 22:13:51
【问题描述】:

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

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

到目前为止我已经尝试过:

【问题讨论】:

    标签: java worldwind


    【解决方案1】:

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

    gov.nasa.worldwind.render.DrawContextImpl 中将orderedRenderables

    protected PriorityQueue<OrderedRenderableEntry> orderedRenderables =
        new PriorityQueue<OrderedRenderableEntry>(100, new Comparator<OrderedRenderableEntry>()
        {
            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<OrderedRenderableEntry> 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);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多