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

📄 graphicscontext3d.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            sendRenderMessage(false, GraphicsContext3D.SET_AURAL_ATTRIBUTES,				attributes, null);        } else {            sendRenderMessage(true, GraphicsContext3D.SET_AURAL_ATTRIBUTES,				attributes, null);        }    }    void doSetAuralAttributes(AuralAttributes attributes) {	this.auralAttributes = attributes;        sendSoundMessage(GraphicsContext3D.SET_AURAL_ATTRIBUTES, attributes, null);    }    /**     * Retrieves the current AuralAttributes component object.     * @return the current AuralAttributes object     */    public AuralAttributes getAuralAttributes() {	return uAuralAttributes;    }    /**     * Sets a flag that specifies whether the double buffering and     * stereo mode from the Canvas3D are overridden.  When set to     * true, this attribute enables the     * <code>frontBufferRendering</code> and <code>stereoMode</code>     * attributes.     *     * @param bufferOverride the new buffer override flag     *     * @see #setFrontBufferRendering     * @see #setStereoMode     *     * @since Java 3D 1.2     */    public void setBufferOverride(boolean bufferOverride) {        uBufferOverride = bufferOverride;        if ((canvas3d.view == null) || 	    (canvas3d.view.universe == null) ||	    (!canvas3d.view.active) ||            (Thread.currentThread() == canvas3d.screen.renderer)) {            doSetBufferOverride(bufferOverride);        } else if (Thread.currentThread() ==                        canvas3d.view.universe.behaviorScheduler) {            sendRenderMessage(false, GraphicsContext3D.SET_BUFFER_OVERRIDE,			new Boolean(bufferOverride), null);        } else {            sendRenderMessage(true, GraphicsContext3D.SET_BUFFER_OVERRIDE,			new Boolean(bufferOverride), null);        }    }     void doSetBufferOverride(boolean bufferOverride) {	if (bufferOverride != this.bufferOverride) {	    this.bufferOverride = bufferOverride;	    dirtyMask |= BUFFER_MODE;        }    }    /**     * Returns the current buffer override flag.     * @return true if buffer override is enabled; otherwise,     * false is returned     *     * @since Java 3D 1.2     */    public boolean getBufferOverride() {	return uBufferOverride;    }    /**     * Sets a flag that enables or disables immediate mode rendering     * into the front buffer of a double buffered Canvas3D.     * This attribute is only used when the     * <code>bufferOverride</code> flag is enabled.     * <p>     * Note that this attribute has no effect if double buffering     * is disabled or is not available on the Canvas3D.     *     * @param frontBufferRendering the new front buffer rendering flag     *     * @see #setBufferOverride     *     * @since Java 3D 1.2     */    public void setFrontBufferRendering(boolean frontBufferRendering) {        uFrontBufferRendering = frontBufferRendering;        if ((canvas3d.view == null) || 	    (canvas3d.view.universe == null) ||	    (!canvas3d.view.active) ||            (Thread.currentThread() == canvas3d.screen.renderer)) {            doSetFrontBufferRendering(frontBufferRendering);        } else if (Thread.currentThread() ==                        canvas3d.view.universe.behaviorScheduler) {            sendRenderMessage(false, GraphicsContext3D.SET_FRONT_BUFFER_RENDERING,				new Boolean(frontBufferRendering), null);        } else {            sendRenderMessage(true, GraphicsContext3D.SET_FRONT_BUFFER_RENDERING,				new Boolean(frontBufferRendering), null);        }    }    void doSetFrontBufferRendering(boolean frontBufferRendering) {	if (frontBufferRendering != this.frontBufferRendering) {	    this.frontBufferRendering = frontBufferRendering;	    dirtyMask |= BUFFER_MODE;        }    }    /**     * Returns the current front buffer rendering flag.     * @return true if front buffer rendering is enabled; otherwise,     * false is returned     *     * @since Java 3D 1.2     */    public boolean getFrontBufferRendering() {	return uFrontBufferRendering;    }    /**     * Sets the stereo mode for immediate mode rendering.  The     * parameter specifies which stereo buffer or buffers is rendered     * into.  This attribute is only used when the     * <code>bufferOverride</code> flag is enabled.     * <ul>     * <li>     * <code>STEREO_LEFT</code> specifies that rendering is done into     * the left eye.     * </li>     * <li>     * <code>STEREO_RIGHT</code> specifies that rendering is done into     * the right eye.     * </li>     * <li>     * <code>STEREO_BOTH</code> specifies that rendering is done into     * both eyes.  This is the default.     * </li>     * </ul>     *     * <p>     * Note that this attribute has no effect if stereo is disabled or     * is not available on the Canvas3D.     *     * @param stereoMode the new stereo mode     *     * @see #setBufferOverride     *     * @since Java 3D 1.2     */    public void setStereoMode(int stereoMode) {        uStereoMode = stereoMode;        if ((canvas3d.view == null) || 	    (canvas3d.view.universe == null) ||	    (!canvas3d.view.active) ||            (Thread.currentThread() == canvas3d.screen.renderer)) {            doSetStereoMode(stereoMode);        } else if (Thread.currentThread() ==                        canvas3d.view.universe.behaviorScheduler) {            sendRenderMessage(false, GraphicsContext3D.SET_STEREO_MODE,			stereoModes[stereoMode], null);        } else {            sendRenderMessage(true, GraphicsContext3D.SET_STEREO_MODE,			stereoModes[stereoMode], null);        }    }    void doSetStereoMode(int stereoMode) {	if (stereoMode != this.stereoMode) {	    this.stereoMode = stereoMode;	    dirtyMask |= BUFFER_MODE;	}    }    /**     * Returns the current stereo mode.     * @return the stereo mode, one of <code>STEREO_LEFT</code>,     * <code>STEREO_RIGHT</code>, or <code>STEREO_BOTH</code>.     *     * @since Java 3D 1.2     */    public int getStereoMode() {	return uStereoMode;    }//// Methods to draw graphics objects//    /**     * Clear the Canvas3D to the color or image specified by the     * current background node.     */    public void clear() {        if ((canvas3d.view == null) || (canvas3d.view.universe == null) ||	    (!canvas3d.view.active)) {	    return;        } else if (Thread.currentThread() == canvas3d.screen.renderer) {            doClear();        } else if (Thread.currentThread() ==                        canvas3d.view.universe.behaviorScheduler) {            sendRenderMessage(false, GraphicsContext3D.CLEAR, null, null);        } else {            sendRenderMessage(true, GraphicsContext3D.CLEAR, null, null);        }    }    void doClear() {                if (!canvas3d.firstPaintCalled)            return;                RenderBin rb = canvas3d.view.renderBin;        BackgroundRetained back = null;                        if (this.background != null)            back = (BackgroundRetained)this.background.retained;        else            back = this.black;                // XXXX: This should ideally be done by the renderer (or by the        // canvas itself) when the canvas is first added to a view.        /*        if ((canvas3d.screen.renderer != null) &&            (canvas3d.screen.renderer.renderBin == null))            canvas3d.screen.renderer.renderBin = rb;         */        // If we are in pure immediate mode, update the view cache        if (!canvas3d.isRunning)            updateViewCache(rb);                // We need to catch NullPointerException when the dsi        // gets yanked from us during a remove.                try {            // Issue 78 - need to get the drawingSurface info every            // frame; this is necessary since the HDC (window ID)            // on Windows can become invalidated without our            // being notified!            if (!canvas3d.offScreen) {                canvas3d.drawingSurfaceObject.getDrawingSurfaceObjectInfo();            }                        if (canvas3d.drawingSurfaceObject.renderLock()) {                // XXXX : Fix texture                /*                if (canvas3d.useSharedCtx) {                    if (canvas3d.screen.renderer.sharedCtx == 0) {                        synchronized (VirtualUniverse.mc.contextCreationLock) {                            canvas3d.screen.renderer.sharedCtx = canvas3d.createNewContext(                                        canvas3d.screen.display,                                        canvas3d.window, 0, true,                                        canvas3d.offScreen);                            canvas3d.screen.renderer.sharedCtxTimeStamp =                                VirtualUniverse.mc.getContextTimeStamp();                            canvas3d.screen.renderer.needToRebuildDisplayList = true;                        }                    }                }                 */                                if (canvas3d.ctx == null) {                    synchronized (VirtualUniverse.mc.contextCreationLock) {                        canvas3d.ctx = canvas3d.createNewContext(null, false);                        if (canvas3d.ctx == null) {                            canvas3d.drawingSurfaceObject.unLock();                            return;                        }                                                canvas3d.ctxTimeStamp =                                VirtualUniverse.mc.getContextTimeStamp();                        canvas3d.screen.renderer.listOfCtxs.add(canvas3d.ctx);                        canvas3d.screen.renderer.listOfCanvases.add(canvas3d);                                                canvas3d.beginScene();                                                if (canvas3d.graphics2D != null) {                            canvas3d.graphics2D.init();                        }                                                // enable separate specular color                        canvas3d.enableSeparateSpecularColor();                    }                                        // create the cache texture state in canvas                    // for state download checking purpose                    if (canvas3d.texUnitState == null) {                        canvas3d.createTexUnitState();                    }                                                            canvas3d.drawingSurfaceObject.contextValidated();                    canvas3d.screen.renderer.currentCtx = canvas3d.ctx;                    canvas3d.screen.renderer.currentDrawable = canvas3d.drawable;                    initializeState();                    canvas3d.ctxChanged = true;                    canvas3d.canvasDirty = 0xffff;                    // Update Appearance                    updateState(rb, RenderMolecule.SURFACE);                                        canvas3d.currentLights = new                            LightRetained[canvas3d.getNumCtxLights(canvas3d.ctx)];                                        for (int j=0; j<canvas3d.currentLights.length; j++) {                        canvas3d.currentLights[j] = null;                    }                }                                                canvas3d.makeCtxCurrent();                                if ((dirtyMask & BUFFER_MODE) != 0) {                    if (bufferOverride) {                        canvas3d.setRenderMode(canvas3d.ctx, stereoMode,                                canvas3d.useDoubleBuffer && !frontBufferRendering);                    } else {                        if (!canvas3d.isRunning) {                            canvas3d.setRenderMode(canvas3d.ctx,                                    Canvas3D.FIELD_ALL,                                    canvas3d.useDoubleBuffer);                        }                    }                    dirtyMask &= ~BUFFER_MODE;                }                                Dimension size = canvas3d.getSize();                int winWidth  = size.width;                int winHeight = size.height;                boolean isByRefBackgroundImage = false;                if (back.image != null) {                                        if (back.image.isByReference()) {                        back.image.geomLock.getLock();                        isByRefBackgroundImage = true;                    }                                    back.image.evaluateExtensions(canvas3d);                }                                canvas3d.clear(back, winWidth, winHeight);                if (isByRefBackgroundImage) {                    back.image.geomLock.unLock();                }                                                // Set the viewport and view matrices                if (!canvas3d.isRunning) {                    CanvasViewCache cvCache = canvas3d.canvasViewCache;                    canvas3d.setViewport(canvas3d.ctx,                            0, 0,                            cvCache.getCanvasWidth(),                            cvCache.getCanvasHeight());                    if (bufferOverride && (stereoMode == STEREO_RIGHT)) {                        canvas3d.setProjectionMatrix(canvas3d.ctx,                            

⌨️ 快捷键说明

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