mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-29 08:15:44 +00:00
Remove projection offset, add the hmd head matrix. Also tidy up a few things.
This commit is contained in:
parent
e7bafe3c7b
commit
f91aa639d6
20 changed files with 126 additions and 113 deletions
|
|
@ -418,7 +418,7 @@ void CubeReflector::updateFace( const ReflectParams ¶ms, U32 faceidx )
|
|||
);
|
||||
|
||||
reflectRenderState.getMaterialDelegate().bind( REFLECTMGR, &ReflectionManager::getReflectionMaterial );
|
||||
reflectRenderState.setDiffuseCameraTransform( params.query->cameraMatrix );
|
||||
reflectRenderState.setDiffuseCameraTransform( params.query->headMatrix );
|
||||
|
||||
// render scene
|
||||
LIGHTMGR->registerGlobalLights( &reflectRenderState.getCullingFrustum(), false );
|
||||
|
|
@ -581,7 +581,7 @@ void PlaneReflector::updateReflection( const ReflectParams ¶ms )
|
|||
reflectTarget->attachTexture( GFXTextureTarget::Color0, reflectTex );
|
||||
reflectTarget->attachTexture( GFXTextureTarget::DepthStencil, depthBuff );
|
||||
GFX->pushActiveRenderTarget();
|
||||
GFX->setActiveRenderTarget( reflectTarget );
|
||||
GFX->setActiveRenderTarget( reflectTarget );
|
||||
|
||||
U32 objTypeFlag = -1;
|
||||
SceneCameraState reflectCameraState = SceneCameraState::fromGFX();
|
||||
|
|
@ -604,7 +604,6 @@ void PlaneReflector::updateReflection( const ReflectParams ¶ms )
|
|||
// Store previous values
|
||||
RectI originalVP = GFX->getViewport();
|
||||
|
||||
Point2F projOffset = GFX->getCurrentProjectionOffset();
|
||||
const FovPort *currentFovPort = GFX->getStereoFovPort();
|
||||
MatrixF inverseEyeTransforms[2];
|
||||
|
||||
|
|
@ -629,9 +628,8 @@ void PlaneReflector::updateReflection( const ReflectParams ¶ms )
|
|||
SceneCameraState cameraStateLeft = SceneCameraState::fromGFX();
|
||||
SceneRenderState renderStateLeft( gClientSceneGraph, SPT_Reflect, cameraStateLeft );
|
||||
renderStateLeft.setSceneRenderStyle(SRS_SideBySide);
|
||||
renderStateLeft.setSceneRenderField(0);
|
||||
renderStateLeft.getMaterialDelegate().bind( REFLECTMGR, &ReflectionManager::getReflectionMaterial );
|
||||
renderStateLeft.setDiffuseCameraTransform( params.query->eyeTransforms[0] );
|
||||
renderStateLeft.setDiffuseCameraTransform( params.query->headMatrix );
|
||||
|
||||
gClientSceneGraph->renderSceneNoLights( &renderStateLeft, objTypeFlag );
|
||||
|
||||
|
|
@ -648,9 +646,8 @@ void PlaneReflector::updateReflection( const ReflectParams ¶ms )
|
|||
SceneCameraState cameraStateRight = SceneCameraState::fromGFX();
|
||||
SceneRenderState renderStateRight( gClientSceneGraph, SPT_Reflect, cameraStateRight );
|
||||
renderStateRight.setSceneRenderStyle(SRS_SideBySide);
|
||||
renderStateRight.setSceneRenderField(1);
|
||||
renderStateRight.getMaterialDelegate().bind( REFLECTMGR, &ReflectionManager::getReflectionMaterial );
|
||||
renderStateRight.setDiffuseCameraTransform( params.query->eyeTransforms[1] );
|
||||
renderStateRight.setDiffuseCameraTransform( params.query->headMatrix );
|
||||
renderStateRight.disableAdvancedLightingBins(true);
|
||||
|
||||
gClientSceneGraph->renderSceneNoLights( &renderStateRight, objTypeFlag );
|
||||
|
|
@ -669,7 +666,7 @@ void PlaneReflector::updateReflection( const ReflectParams ¶ms )
|
|||
);
|
||||
|
||||
reflectRenderState.getMaterialDelegate().bind( REFLECTMGR, &ReflectionManager::getReflectionMaterial );
|
||||
reflectRenderState.setDiffuseCameraTransform( params.query->cameraMatrix );
|
||||
reflectRenderState.setDiffuseCameraTransform( params.query->headMatrix );
|
||||
|
||||
gClientSceneGraph->renderSceneNoLights( &reflectRenderState, objTypeFlag );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ SceneCameraState::SceneCameraState( const RectI& viewport, const Frustum& frustu
|
|||
: mViewport( viewport ),
|
||||
mFrustum( frustum ),
|
||||
mWorldViewMatrix( worldView ),
|
||||
mHeadWorldViewMatrix( worldView ),
|
||||
mProjectionMatrix( projection )
|
||||
{
|
||||
mViewDirection = frustum.getTransform().getForwardVector();
|
||||
|
|
@ -39,7 +40,7 @@ SceneCameraState::SceneCameraState( const RectI& viewport, const Frustum& frustu
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
SceneCameraState SceneCameraState::fromGFX()
|
||||
SceneCameraState SceneCameraState::fromGFX( )
|
||||
{
|
||||
return fromGFXWithViewport( GFX->getViewport() );
|
||||
}
|
||||
|
|
@ -56,10 +57,20 @@ SceneCameraState SceneCameraState::fromGFXWithViewport( const RectI& viewport )
|
|||
Frustum frustum = GFX->getFrustum();
|
||||
frustum.setTransform( camera );
|
||||
|
||||
return SceneCameraState(
|
||||
SceneCameraState ret = SceneCameraState(
|
||||
viewport,
|
||||
frustum,
|
||||
world,
|
||||
GFX->getProjectionMatrix()
|
||||
);
|
||||
|
||||
// If rendering to stereo, make sure we get the head matrix
|
||||
S32 stereoTarget = GFX->getCurrentStereoTarget();
|
||||
if (stereoTarget != -1)
|
||||
{
|
||||
ret.mHeadWorldViewMatrix = GFX->getStereoHeadTransform();
|
||||
ret.mHeadWorldViewMatrix.inverse();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,6 +51,9 @@ class SceneCameraState
|
|||
/// The inverse of the frustum's transform stored here for caching.
|
||||
MatrixF mWorldViewMatrix;
|
||||
|
||||
/// Actual head position (will be - eye pos)
|
||||
MatrixF mHeadWorldViewMatrix;
|
||||
|
||||
/// The projection matrix.
|
||||
MatrixF mProjectionMatrix;
|
||||
|
||||
|
|
@ -88,6 +91,9 @@ class SceneCameraState
|
|||
/// Return the world-space view vector.
|
||||
const Point3F& getViewDirection() const { return mViewDirection; }
|
||||
|
||||
/// Returns the world->view transform for the head (used to calculate various display metrics)
|
||||
const MatrixF& getHeadWorldViewMatrix() const { return mHeadWorldViewMatrix; }
|
||||
|
||||
/// Return the view->world transform. This is a shortcut for getFrustum().getTransform().
|
||||
const MatrixF& getViewWorldMatrix() const { return mFrustum.getTransform(); }
|
||||
|
||||
|
|
|
|||
|
|
@ -239,7 +239,6 @@ void SceneManager::renderScene( SceneRenderState* renderState, U32 objectMask, S
|
|||
MatrixF originalWorld = GFX->getWorldMatrix();
|
||||
Frustum originalFrustum = GFX->getFrustum();
|
||||
|
||||
Point2F projOffset = GFX->getCurrentProjectionOffset();
|
||||
const FovPort *currentFovPort = GFX->getStereoFovPort();
|
||||
const MatrixF *eyeTransforms = GFX->getStereoEyeTransforms();
|
||||
const MatrixF *worldEyeTransforms = GFX->getInverseStereoEyeTransforms();
|
||||
|
|
@ -257,7 +256,6 @@ void SceneManager::renderScene( SceneRenderState* renderState, U32 objectMask, S
|
|||
SceneCameraState cameraStateLeft = SceneCameraState::fromGFX();
|
||||
SceneRenderState renderStateLeft( this, renderState->getScenePassType(), cameraStateLeft );
|
||||
renderStateLeft.setSceneRenderStyle(SRS_SideBySide);
|
||||
renderStateLeft.setSceneRenderField(0);
|
||||
|
||||
renderSceneNoLights( &renderStateLeft, objectMask, baseObject, baseZone ); // left
|
||||
|
||||
|
|
@ -277,7 +275,6 @@ void SceneManager::renderScene( SceneRenderState* renderState, U32 objectMask, S
|
|||
SceneCameraState cameraStateRight = SceneCameraState::fromGFX();
|
||||
SceneRenderState renderStateRight( this, renderState->getScenePassType(), cameraStateRight );
|
||||
renderStateRight.setSceneRenderStyle(SRS_SideBySide);
|
||||
renderStateRight.setSceneRenderField(1);
|
||||
|
||||
renderSceneNoLights( &renderStateRight, objectMask, baseObject, baseZone ); // right
|
||||
|
||||
|
|
|
|||
|
|
@ -48,11 +48,11 @@ SceneRenderState::SceneRenderState( SceneManager* sceneManager,
|
|||
mDisableAdvancedLightingBins( false ),
|
||||
mRenderArea( view.getFrustum().getBounds() ),
|
||||
mAmbientLightColor( sceneManager->getAmbientLightColor() ),
|
||||
mSceneRenderStyle( SRS_Standard ),
|
||||
mRenderField( 0 )
|
||||
mSceneRenderStyle( SRS_Standard )
|
||||
{
|
||||
// Setup the default parameters for the screen metrics methods.
|
||||
mDiffuseCameraTransform = view.getViewWorldMatrix();
|
||||
mDiffuseCameraTransform = view.getHeadWorldViewMatrix();
|
||||
mDiffuseCameraTransform.inverse();
|
||||
|
||||
// The vector eye is the camera vector with its
|
||||
// length normalized to 1 / zFar.
|
||||
|
|
|
|||
|
|
@ -72,9 +72,6 @@ class SceneRenderState
|
|||
/// The render style being performed
|
||||
SceneRenderStyle mSceneRenderStyle;
|
||||
|
||||
/// When doing stereo rendering, the current field that is being rendered
|
||||
S32 mRenderField;
|
||||
|
||||
/// The render pass which we are setting up with this scene state.
|
||||
RenderPassManager* mRenderPass;
|
||||
|
||||
|
|
@ -237,12 +234,6 @@ class SceneRenderState
|
|||
/// Set the rendering style used for the scene
|
||||
void setSceneRenderStyle(SceneRenderStyle style) { mSceneRenderStyle = style; }
|
||||
|
||||
/// Get the stereo field being rendered
|
||||
S32 getSceneRenderField() const { return mRenderField; }
|
||||
|
||||
/// Set the stereo field being rendered
|
||||
void setSceneRenderField(S32 field) { mRenderField = field; }
|
||||
|
||||
/// @}
|
||||
|
||||
/// @name Transforms, projections, and viewports.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue