⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractscenecontroller.java

📁 world wind java sdk 源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        dc.getGL().glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);    }    protected void finalizeFrame(DrawContext dc)    {        GL gl = dc.getGL();        gl.glMatrixMode(GL.GL_MODELVIEW);        gl.glPopMatrix();        gl.glMatrixMode(GL.GL_PROJECTION);        gl.glPopMatrix();        gl.glPopAttrib();//        checkGLErrors(dc);    }    protected void applyView(DrawContext dc)    {        if (dc.getView() != null)            dc.getView().apply(dc);    }    protected void createTerrain(DrawContext dc)    {        if (dc.getSurfaceGeometry() == null)        {            if (dc.getModel() != null && dc.getModel().getGlobe() != null)            {                SectorGeometryList sgl = dc.getModel().getGlobe().tessellate(dc);                dc.setSurfaceGeometry(sgl);                dc.setVisibleSector(sgl.getSector());            }            if (dc.getSurfaceGeometry() == null)            {                Logging.logger().warning("generic.NoSurfaceGeometry");                dc.setPerFrameStatistic(PerformanceStatistic.TERRAIN_TILE_COUNT, "Terrain Tiles", 0);                // keep going because some layers, etc. may have meaning w/o surface geometry            }            dc.setPerFrameStatistic(PerformanceStatistic.TERRAIN_TILE_COUNT, "Terrain Tiles",                dc.getSurfaceGeometry().size());        }    }    protected void preRender(DrawContext dc)    {        if (dc.getLayers() == null)            return;        for (Layer layer : dc.getLayers())        {            try            {                dc.setCurrentLayer(layer);                layer.preRender(dc);            }            catch (Exception e)            {                String message = Logging.getMessage("SceneController.ExceptionWhilePickingInLayer",                    (layer != null ? layer.getClass().getName() : Logging.getMessage("term.unknown")));                Logging.logger().log(Level.SEVERE, message, e);                // Don't abort; continue on to the next layer.            }        }        dc.setCurrentLayer(null);    }    private ArrayList<Point> pickPoints = new ArrayList<Point>();    protected void pickTerrain(DrawContext dc)    {        if (dc.isPickingMode() && dc.getVisibleSector() != null && dc.getSurfaceGeometry() != null &&            dc.getSurfaceGeometry().size() > 0)        {            this.pickPoints.clear();            if (dc.getPickPoint() != null)                this.pickPoints.add(dc.getPickPoint());            // Clear viewportCenterPosition.            dc.setViewportCenterPosition(null);            Point vpc = dc.getViewportCenterScreenPoint();            if (vpc != null)                this.pickPoints.add(vpc);            if (this.pickPoints.size() == 0)                return;            List<PickedObject> pickedObjects = dc.getSurfaceGeometry().pick(dc, this.pickPoints);            if (pickedObjects == null || pickedObjects.size() == 0)                return;            for (PickedObject po : pickedObjects)            {                if (po == null)                    continue;                if (po.getPickPoint().equals(dc.getPickPoint()))                    dc.addPickedObject(po);                else if (po.getPickPoint().equals(vpc))                    dc.setViewportCenterPosition((Position) po.getObject());            }        }    }    protected void pickLayers(DrawContext dc)    {        if (dc.getLayers() != null)        {            for (Layer layer : dc.getLayers())            {                try                {                    if (layer != null && layer.isPickEnabled())                    {                        dc.setCurrentLayer(layer);                        layer.pick(dc, dc.getPickPoint());                    }                }                catch (Exception e)                {                    String message = Logging.getMessage("SceneController.ExceptionWhilePickingInLayer",                        (layer != null ? layer.getClass().getName() : Logging.getMessage("term.unknown")));                    Logging.logger().log(Level.SEVERE, message, e);                    // Don't abort; continue on to the next layer.                }            }            dc.setCurrentLayer(null);        }    }    protected void resolveTopPick(DrawContext dc)    {        // Make a last reading to find out which is a top (resultant) color        PickedObjectList pickedObjectsList = dc.getPickedObjects();        if (pickedObjectsList != null && (pickedObjectsList.size() == 1))        {            pickedObjectsList.get(0).setOnTop();        }        else if (pickedObjectsList != null && (pickedObjectsList.size() > 1))        {            int[] viewport = new int[4];            java.nio.ByteBuffer pixel = com.sun.opengl.util.BufferUtil.newByteBuffer(3);            GL gl = dc.getGL();            gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0);            gl.glReadPixels(dc.getPickPoint().x, viewport[3] - dc.getPickPoint().y, 1, 1, GL.GL_RGB,                GL.GL_UNSIGNED_BYTE, pixel);            Color topColor = new Color(pixel.get(0) & 0xff, pixel.get(1) & 0xff, pixel.get(2) & 0xff, 0);            int colorCode = topColor.getRGB();            if (0 != colorCode)            {   // let's find the picked object in the list and set "OnTop" flag                for (PickedObject po : pickedObjectsList)                {                    if (null != po && po.getColorCode() == colorCode)                    {                        po.setOnTop();                        break;                    }                }            }        } // end of top pixel reading    }    protected void pick(DrawContext dc)    {        this.pickTime = System.currentTimeMillis();        this.lastPickedObjects = null;        try        {            dc.enablePickingMode();            this.pickTerrain(dc);            if (dc.getPickPoint() == null)                return;            this.pickLayers(dc);            // Pick against the deferred/ordered renderables            while (dc.getOrderedRenderables().peek() != null)            {                dc.getOrderedRenderables().poll().pick(dc, dc.getPickPoint());            }            this.resolveTopPick(dc);            this.lastPickedObjects = new PickedObjectList(dc.getPickedObjects());        }        catch (Throwable e)        {            Logging.logger().log(Level.SEVERE, Logging.getMessage("BasicSceneController.ExceptionDuringPick"), e);        }        finally        {            dc.disablePickingMode();            this.pickTime = System.currentTimeMillis() - this.pickTime;        }    }    protected void draw(DrawContext dc)    {        try        {            if (dc.getLayers() != null)            {                for (Layer layer : dc.getLayers())                {                    try                    {                        if (layer != null)                        {                            dc.setCurrentLayer(layer);                            layer.render(dc);                        }                    }                    catch (Exception e)                    {                        String message = Logging.getMessage("SceneController.ExceptionWhileRenderingLayer",                            (layer != null ? layer.getClass().getName() : Logging.getMessage("term.unknown")));                        Logging.logger().log(Level.SEVERE, message, e);                        // Don't abort; continue on to the next layer.                    }                }                dc.setCurrentLayer(null);            }            while (dc.getOrderedRenderables().peek() != null)            {                dc.getOrderedRenderables().poll().render(dc);            }            // Diagnostic displays.            if (dc.getSurfaceGeometry() != null && dc.getModel() != null && (dc.getModel().isShowWireframeExterior() ||                dc.getModel().isShowWireframeInterior() || dc.getModel().isShowTessellationBoundingVolumes()))            {                Model model = dc.getModel();                float[] previousColor = new float[4];                dc.getGL().glGetFloatv(GL.GL_CURRENT_COLOR, previousColor, 0);                for (SectorGeometry sg : dc.getSurfaceGeometry())                {                    if (model.isShowWireframeInterior() || model.isShowWireframeExterior())                        sg.renderWireframe(dc, model.isShowWireframeInterior(), model.isShowWireframeExterior());                    if (model.isShowTessellationBoundingVolumes())                    {                        dc.getGL().glColor3d(1, 0, 0);                        sg.renderBoundingVolume(dc);                    }                }                dc.getGL().glColor4fv(previousColor, 0);            }        }        catch (Throwable e)        {            Logging.logger().log(Level.SEVERE, Logging.getMessage("BasicSceneController.ExceptionDuringRendering"), e);        }    }    /**     * Called to check for openGL errors. This method includes a "round-trip" between the application and renderer,     * which is slow. Therefore, this method is excluded from the "normal" render pass. It is here as a matter of     * convenience to developers, and is not part of the API.     *     * @param dc the relevant <code>DrawContext</code>     */    @SuppressWarnings({"UNUSED_SYMBOL", "UnusedDeclaration"})    protected void checkGLErrors(DrawContext dc)    {        GL gl = dc.getGL();        for (int err = gl.glGetError(); err != GL.GL_NO_ERROR; err = gl.glGetError())        {            String msg = dc.getGLU().gluErrorString(err);            msg += err;            Logging.logger().severe(msg);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -