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

📄 renderer.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
			    }			    if (canvas.dirtyDisplayList) {                                renderBin.updateDirtyDisplayLists(canvas,                                        canvas.dirtyRenderMoleculeList,					canvas.dirtyDlistPerRinfoList,					canvas.dirtyRenderAtomList, false);				canvas.dirtyDisplayList = false;                            }                        }		        // lighting setup                        if (canvas.view.localEyeLightingEnable !=                                                canvas.ctxEyeLightingEnable) {                            canvas.ctxUpdateEyeLightingEnable(canvas.ctx,					      canvas.view.localEyeLightingEnable);                            canvas.ctxEyeLightingEnable =                                canvas.view.localEyeLightingEnable;                        }		        // stereo setup                        boolean useStereo = cvCache.getUseStereo();                        if (useStereo) {                            num_stereo_passes = 2;                            stereo_mode = Canvas3D.FIELD_LEFT;                            sharedStereoZBuffer =                                VirtualUniverse.mc.sharedStereoZBuffer;                        } else {                            num_stereo_passes = 1;                            stereo_mode = Canvas3D.FIELD_ALL;			    // just in case user set flag - 			    // disable since we are not in stereo			    sharedStereoZBuffer = false;                        }		        // full screen anti-aliasing setup			if (canvas.view.getSceneAntialiasingEnable() &&			    canvas.sceneAntialiasingAvailable) {			    			    if (!VirtualUniverse.mc.isD3D() && 				((canvas.extensionsSupported & Canvas3D.MULTISAMPLE) == 0) || 				!canvas.sceneAntialiasingMultiSamplesAvailable) {				doAccum = true;				num_accum_passes = NUM_ACCUMULATION_SAMPLES;				System.arraycopy(						 cvCache.getLeftProjection().mat,                                0, accumLeftProj.mat, 0, 16);                                accumDxFactor = (                             	    canvas.canvasViewCache.getPhysicalWindowWidth() /                                    canvas.canvasViewCache.getCanvasWidth())*canvas.view.fieldOfView;                                accumDyFactor = (                                    canvas.canvasViewCache.getPhysicalWindowHeight() /                                    canvas.canvasViewCache.getCanvasHeight())*canvas.view.fieldOfView;							        accumLeftX = accumLeftProj.mat[3];			        accumLeftY = accumLeftProj.mat[7];				if (useStereo) {				    System.arraycopy(					cvCache.getRightProjection().mat,					0, accumRightProj.mat, 0, 16);				    accumRightX = accumRightProj.mat[3];				    accumRightY = accumRightProj.mat[7];				}				if (renderBin.geometryBackground != null) {				    System.arraycopy(					cvCache.getInfLeftProjection().mat,					0, accumInfLeftProj.mat, 0, 16);				    accumInfLeftX = accumInfLeftProj.mat[3];				    accumInfLeftY = accumInfLeftProj.mat[7];				    if (useStereo) {					System.arraycopy(					    cvCache.getInfRightProjection().mat,					    0, accumInfRightProj.mat, 0, 16);				        accumInfRightX = accumInfRightProj.mat[3];				        accumInfRightY = accumInfRightProj.mat[7];				    }				}							    } else {				if (!canvas.antialiasingSet) {				    // System.err.println("Renderer : Enable FullSceneAntialiasing");				    canvas.setFullSceneAntialiasing(canvas.ctx, true);				    canvas.antialiasingSet = true;				}			    }		        } else {			    if (canvas.antialiasingSet) {				// System.err.println("Renderer : Disable SceneAntialiasing");				canvas.setFullSceneAntialiasing(canvas.ctx, false);				canvas.antialiasingSet = false;			    }			}		        // background geometry setup	    	        if (renderBin.geometryBackground != null) {			    renderBin.updateInfVworldToVpc();		        }		        // setup default render mode - render to both eyes                        canvas.setRenderMode(canvas.ctx,					     Canvas3D.FIELD_ALL,					     canvas.useDoubleBuffer);			canvas.beginScene();			// this is if the background image resizes with the canvas			int winWidth = cvCache.getCanvasWidth();			int winHeight = cvCache.getCanvasHeight();		        // clear background if not full screen antialiasing                        // and not in stereo mode                        if (!doAccum && !sharedStereoZBuffer) {			    BackgroundRetained bg = renderBin.background;                                                        canvas.clear(bg, winWidth, winHeight);                                                    }		        // handle preRender callback			if (VirtualUniverse.mc.doDsiRenderLock) {			    canvas.drawingSurfaceObject.unLock();			}                        canvas.view.inCanvasCallback = true;                        try {                            canvas.preRender();                        } catch (RuntimeException e) {                            System.err.println("Exception occurred during Canvas3D callback:");                            e.printStackTrace();                         } catch (Error e) {                             // Issue 264 - catch Error so Renderer doesn't die                             System.err.println("Error occurred during Canvas3D callback:");                             e.printStackTrace();                        }                        canvas.view.inCanvasCallback = false;			if ((VirtualUniverse.mc.doDsiRenderLock) &&			    (!canvas.drawingSurfaceObject.renderLock())) {			    if ((offBufRetained != null) &&				offBufRetained.isByReference()) {				offBufRetained.geomLock.unLock();			    }                            canvas.offScreenRendering = false;                            break doneRender;                        }		        // render loop		        for (pass = 0; pass < num_stereo_passes; pass++) {                            if (doAccum) {                                canvas.clearAccum(canvas.ctx);                            }                            canvas.setRenderMode(canvas.ctx, stereo_mode,                                                  canvas.useDoubleBuffer);						                            for (apass = 0; apass < num_accum_passes; apass++) {			        // jitter projection matrix and clear background			        // for full screen anti-aliasing rendering			        if (doAccum) {                                    accumDx = ACCUM_SAMPLES_X[apass] *						accumDxFactor;                                    accumDy = ACCUM_SAMPLES_Y[apass] *						accumDyFactor;				    accumLeftProj.mat[3] = accumLeftX +					accumLeftProj.mat[0] * accumDx +					accumLeftProj.mat[1] * accumDy;				    accumLeftProj.mat[7] = accumLeftY +					accumLeftProj.mat[4] * accumDx +					accumLeftProj.mat[5] * accumDy;				    if (useStereo) {                                        accumRightProj.mat[3] = accumRightX +					    accumRightProj.mat[0] * accumDx +					    accumRightProj.mat[1] * accumDy;                                        accumRightProj.mat[7] = accumRightY +					    accumRightProj.mat[4] * accumDx +					    accumRightProj.mat[5] * accumDy;				    }				    if (renderBin.geometryBackground != null) {                                        accumInfLeftProj.mat[3] = accumInfLeftX +					    accumInfLeftProj.mat[0] * accumDx +					    accumInfLeftProj.mat[1] * accumDy;                                        accumInfLeftProj.mat[7] = accumInfLeftY +					    accumInfLeftProj.mat[4] * accumDx +					    accumInfLeftProj.mat[5] * accumDy;				        if (useStereo) {                                            accumInfRightProj.mat[3] = 					      accumInfRightX +					      accumInfRightProj.mat[0] * accumDx +					      accumInfRightProj.mat[1] * accumDy;                                            accumInfRightProj.mat[7] = 					      accumInfRightY +					      accumInfRightProj.mat[4] * accumDx +					      accumInfRightProj.mat[5] * accumDy;				        }                                    }			        }                                // clear background for stereo and                                //  accumulation buffer cases                                if (doAccum || sharedStereoZBuffer) {				    BackgroundRetained bg = renderBin.background;                                    canvas.clear(bg, winWidth, winHeight);                                }			        // render background geometry	    	                if (renderBin.geometryBackground != null) {				    // setup rendering matrices				    if (pass == 0) {                                        canvas.vpcToEc = 					    cvCache.getInfLeftVpcToEc();	    	                        if (doAccum) {                                            canvas.setProjectionMatrix(						canvas.ctx, accumInfLeftProj);				        } else {                                            canvas.setProjectionMatrix(						canvas.ctx,					       	cvCache.getInfLeftProjection());				        }				    } else {                                        canvas.vpcToEc = 					    cvCache.getInfRightVpcToEc();	    	                        if (doAccum) {                                            canvas.setProjectionMatrix(						canvas.ctx, accumInfRightProj);				        } else {                                            canvas.setProjectionMatrix(						canvas.ctx,					       cvCache.getInfRightProjection());				        }                                    }                                    canvas.vworldToEc.mul(canvas.vpcToEc,                                        cvCache.getInfVworldToVpc());				    // render background geometry				    renderBin.renderBackground(canvas);			        }			        // setup rendering matrices                                if (pass == 0) {                            	    canvas.vpcToEc = cvCache.getLeftVpcToEc();			            if (doAccum) {                                        canvas.setProjectionMatrix(canvas.ctx, accumLeftProj);                                    } else {                                        canvas.setProjectionMatrix(canvas.ctx,					cvCache.getLeftProjection());				    }			        } else {                            	    canvas.vpcToEc = cvCache.getRightVpcToEc();			            if (doAccum) {                                        canvas.setProjectionMatrix(						canvas.ctx, accumRightProj);                                    } else {                                        canvas.setProjectionMatrix(canvas.ctx,						cvCache.getRightProjection());				    }			        }                                 canvas.vworldToEc.mul(canvas.vpcToEc,                                        cvCache.getVworldToVpc());                                synchronized (cvCache) {                                 if (pass == 0) {                                     canvas.setFrustumPlanes(cvCache.getLeftFrustumPlanesInVworld());                                 } else {                                     canvas.setFrustumPlanes(cvCache.getRightFrustumPlanesInVworld());                                 }                                }				// Force view matrix dirty for each eye.				if (useStereo) {				    canvas.canvasDirty |= Canvas3D.VIEW_MATRIX_DIRTY;				}							        // render opaque geometry                                renderBin.renderOpaque(canvas);			        // render ordered geometry                                renderBin.renderOrdered(canvas);			        // handle renderField callback				if (VirtualUniverse.mc.doDsiRenderLock) {				    canvas.drawingSurfaceObject.unLock();				}                                canvas.view.inCanvasCallback = true;                                try {                                    canvas.renderField(stereo_mode);                                } catch (RuntimeException e) {                                    System.err.println("Exception occurred during Canvas3D callback:");                                    e.printStackTrace();                                } catch (Error e) {                                    // Issue 264 - catch Error so Renderer doesn't die                                    System.err.println("Error occurred during Canvas3D callback:");                                    e.printStackTrace();                                }                                canvas.view.inCanvasCallback = false;				if ((VirtualUniverse.mc.doDsiRenderLock) &&				    (!canvas.drawingSurfaceObject.renderLock())) {				    if ((offBufRetained != null) &&					offBufRetained.isByReference()) {					offBufRetained.geomLock.unLock();				    }                                    canvas.offScreenRendering = false;                                    break doneRender;                                }			        // render transparent geometry                                renderBin.renderTransparent(canvas);                                if (doAccum)                                    canvas.accum(canvas.ctx, accumValue); 			    }                            if (doAccum)                                canvas.accumReturn(canvas.ctx);                            if (useStereo) {                                stereo_mode = Canvas3D.FIELD_RIGHT;				canvas.rightStereoPass = true;			    }		        }			canvas.imageReady = true;			canvas.rightStereoPass = false;		        // reset renderMode                        canvas.setRenderMode(canvas.ctx,

⌨️ 快捷键说明

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