Browse Source

Merge pull request #532 from DavidWyand-GG/OculusRiftUpdate2

Fix GroundCover banking with camera
David Wyand 11 years ago
parent
commit
a959b0f800
1 changed files with 11 additions and 3 deletions
  1. 11 3
      Engine/source/T3D/fx/groundCover.cpp

+ 11 - 3
Engine/source/T3D/fx/groundCover.cpp

@@ -1572,12 +1572,20 @@ void GroundCover::prepRenderImage( SceneRenderState *state )
 
       mShaderConstData.gustInfo.set( mWindGustLength, mWindGustFrequency * simTime, mWindGustStrength );
       mShaderConstData.turbInfo.set( mWindTurbulenceFrequency * simTime, mWindTurbulenceStrength );      
-            
+
+      // Use the camera's forward vector to calculate the camera's right
+      // and up vectors.  This removes any camera banking from affecting
+      // the ground cover.
       const MatrixF &camMat = state->getDiffuseCameraTransform();
       Point3F camDir, camUp, camRight;
       camMat.getColumn( 1, &camDir );
-      camMat.getColumn( 2, &camUp );
-      camMat.getColumn( 0, &camRight );
+      mCross( camDir, Point3F::UnitZ, &camRight );
+      if ( camRight.magnitudeSafe() == 0.0f )
+      {
+         camRight.set( 0.0f, -1.0f, 0.0f );
+      }
+      camRight.normalizeSafe();
+      mCross( camRight, camDir, &camUp );
 
       // Limit the camera up vector to keep the billboards 
       // from leaning too far down into the terrain.