From 93ad2f2ef6f41127e967577a195837be54504179 Mon Sep 17 00:00:00 2001 From: Frederic Bouvier Date: Mon, 2 Apr 2012 23:54:31 +0200 Subject: [PATCH] Hopefully fix the shadow disappearing because of range animation issue in a more elegant way --- src/Main/renderer.cxx | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx index 54a3a34e5..d8c6d5e2b 100644 --- a/src/Main/renderer.cxx +++ b/src/Main/renderer.cxx @@ -801,7 +801,9 @@ osg::Camera* FGRenderer::buildDeferredShadowCamera( flightgear::CameraInfo* info mainShadowCamera->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT ); attachBufferToCamera( info, mainShadowCamera, osg::Camera::DEPTH_BUFFER, flightgear::SHADOW_CAMERA, flightgear::RenderBufferInfo::SHADOW_BUFFER ); mainShadowCamera->setComputeNearFarMode(osg::Camera::DO_NOT_COMPUTE_NEAR_FAR); - mainShadowCamera->setReferenceFrame(osg::Transform::ABSOLUTE_RF_INHERIT_VIEWPOINT); + mainShadowCamera->setReferenceFrame(osg::Transform::ABSOLUTE_RF); + mainShadowCamera->setProjectionMatrix(osg::Matrix::identity()); + mainShadowCamera->setCullingMode( osg::CullSettings::NO_CULLING ); mainShadowCamera->setViewport( 0, 0, _shadowMapSize, _shadowMapSize ); mainShadowCamera->setDrawBuffer(GL_FRONT); mainShadowCamera->setReadBuffer(GL_FRONT); @@ -870,15 +872,12 @@ void FGRenderer::updateShadowCamera(const flightgear::CameraInfo* info, const os updateShadowCascade(info, camera, grp, 2, left, right, bottom, top, zNear, 50.0/zNear,512.0/zNear); updateShadowCascade(info, camera, grp, 3, left, right, bottom, top, zNear, 512.0/zNear,5000.0/zNear); { - osg::Camera* cascade = static_cast( mainShadowCamera ); - osg::Matrixd &viewMatrix = cascade->getViewMatrix(); - osg::Matrixd &projectionMatrix = cascade->getProjectionMatrix(); + osg::Matrixd &viewMatrix = mainShadowCamera->getViewMatrix(); - osg::Vec4 aim = osg::Vec4( 0.0, 0.0, -7500., 1.0 ) * camera->getInverseViewMatrix(); + osg::Vec4 aim = osg::Vec4( 0.0, 0.0, 0.0, 1.0 ) * camera->getInverseViewMatrix(); - projectionMatrix.makeOrtho( -7500., 7500., -7500., 7500., 1., 15000.0 ); osg::Vec3 position( aim.x(), aim.y(), aim.z() ); - viewMatrix.makeLookAt( position + (getSunDirection() * 10000.0), position, position ); + viewMatrix.makeLookAt( position, position + (getSunDirection() * 10000.0), position ); } } } -- 2.39.5