public javax.vecmath.Vector3d transformToViewport(Vector3 xyz, Camera camera) { javax.vecmath.Vector3d xyzInCamera = transformTo(xyz, camera); RenderTarget renderTarget = camera.renderTarget.getRenderTargetValue(); return renderTarget .getInternal() .transformFromCameraToViewport(xyzInCamera, camera.getSceneGraphCamera()); }
@Override public void initScene() { mCameraLeft = new Camera(); mCameraLeft.setNearPlane(.01f); mCameraLeft.setFieldOfView(getCurrentCamera().getFieldOfView()); mCameraLeft.setNearPlane(getCurrentCamera().getNearPlane()); mCameraLeft.setFarPlane(getCurrentCamera().getFarPlane()); mCameraRight = new Camera(); mCameraRight.setNearPlane(.01f); mCameraRight.setFieldOfView(getCurrentCamera().getFieldOfView()); mCameraRight.setNearPlane(getCurrentCamera().getNearPlane()); mCameraRight.setFarPlane(getCurrentCamera().getFarPlane()); setPupilDistance(mPupilDistance); mLeftQuadMaterial = new Material(); mLeftQuadMaterial.setColorInfluence(0); mRightQuadMaterial = new Material(); mRightQuadMaterial.setColorInfluence(0); mSideBySideScene = new RajawaliScene(this); mLeftQuad = new ScreenQuad(); mLeftQuad.setScaleX(.5); mLeftQuad.setX(-.25); mLeftQuad.setMaterial(mLeftQuadMaterial); mSideBySideScene.addChild(mLeftQuad); mRightQuad = new ScreenQuad(); mRightQuad.setScaleX(.5); mRightQuad.setX(.25); mRightQuad.setMaterial(mRightQuadMaterial); mSideBySideScene.addChild(mRightQuad); addScene(mSideBySideScene); mViewportWidthHalf = (int) (mDefaultViewportWidth * .5f); mLeftRenderTarget = new RenderTarget("sbsLeftRT", mViewportWidthHalf, mDefaultViewportHeight); mLeftRenderTarget.setFullscreen(false); mRightRenderTarget = new RenderTarget("sbsRightRT", mViewportWidthHalf, mDefaultViewportHeight); mRightRenderTarget.setFullscreen(false); mCameraLeft.setProjectionMatrix(mViewportWidthHalf, mDefaultViewportHeight); mCameraRight.setProjectionMatrix(mViewportWidthHalf, mDefaultViewportHeight); addRenderTarget(mLeftRenderTarget); addRenderTarget(mRightRenderTarget); try { mLeftQuadMaterial.addTexture(mLeftRenderTarget.getTexture()); mRightQuadMaterial.addTexture(mRightRenderTarget.getTexture()); } catch (TextureException e) { e.printStackTrace(); } }
@Override public void initScene() { mMainQuadMaterial = new Material(); mMainQuadMaterial.setColorInfluence(0); mMiniQuadMaterial = new Material(); mMiniQuadMaterial.setColorInfluence(0); mMainQuad = new WorkaroundScreenQuad(); mMainQuad.setMaterial(mMainQuadMaterial); mMainQuad.setTransparent(true); // Set-up viewport dimensions of mini quad for touch event processing setupMiniTouchLimits(); mMiniQuad = new WorkaroundScreenQuad(); // Set the size of the mini view using a scale factor (mPipScale times the main view) mMiniQuad.setScale(mPipScale); // Position the mini view in the top right corner // For X and Y, the position is: // 50% screen shift to the right/top minus half the size of the minimap to bring it back // left/bottom into full view plus a little bit more left/bottom to leave margin mMiniQuad.setX(.5d - mPipScale / 2d - mPipMarginX / mDefaultViewportWidth); mMiniQuad.setY(.5d - mPipScale / 2d - mPipMarginY / mDefaultViewportHeight); mMiniQuad.setMaterial(mMiniQuadMaterial); mMainRenderTarget = new RenderTarget("pipMainRT", mDefaultViewportWidth, mDefaultViewportHeight); mMainRenderTarget.setFullscreen(false); mMiniRenderTarget = new RenderTarget("pipMiniRT", mDefaultViewportWidth, mDefaultViewportHeight); mMiniRenderTarget.setFullscreen(false); addRenderTarget(mMainRenderTarget); addRenderTarget(mMiniRenderTarget); mCompositeScene = getCurrentScene(); mCompositeScene.addChild(mMainQuad); mCompositeScene.addChild(mMiniQuad); try { mMiniQuadMaterial.addTexture(mMiniRenderTarget.getTexture()); mMainQuadMaterial.addTexture(mMainRenderTarget.getTexture()); } catch (ATexture.TextureException e) { e.printStackTrace(); } // Init main scene mMainRenderer.initScene(); // Init mini scene mMiniRenderer.initScene(); }