]> git.mxchange.org Git - flightgear.git/commitdiff
Hopefully fix the shadow disappearing because of range animation issue in a more...
authorFrederic Bouvier <fredfgfs01@free.fr>
Mon, 2 Apr 2012 21:54:31 +0000 (23:54 +0200)
committerFrederic Bouvier <fredfgfs01@free.fr>
Mon, 2 Apr 2012 21:54:31 +0000 (23:54 +0200)
src/Main/renderer.cxx

index 54a3a34e50dc588f62fd882ade4f110006548b20..d8c6d5e2b11c25ac2fd5cd9111673a9f6765e6af 100644 (file)
@@ -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<osg::Camera*>( 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 );
             }
         }
     }