mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-03-05 05:20:31 +00:00
Fix lens flare in side-by-side view
This commit is contained in:
parent
c6d2456a7c
commit
784f6f92d8
5 changed files with 21 additions and 1 deletions
|
|
@ -277,8 +277,8 @@ bool LightFlareData::_testVisibility(const SceneRenderState *state, LightFlareSt
|
|||
// the last result.
|
||||
const Point3F &lightPos = flareState->lightMat.getPosition();
|
||||
const RectI &viewport = RectI(Point2I(0, 0), GFX->getViewport().extent);
|
||||
MatrixF camProjMatrix = state->getSceneManager()->getNonClipProjection();
|
||||
|
||||
MatrixF camProjMatrix = projMatrix = state->getSceneManager()->getNonClipProjection();
|
||||
bool onScreen = MathUtils::mProjectWorldToScreen( lightPos, outLightPosSS, viewport, GFX->getWorldMatrix(), camProjMatrix );
|
||||
|
||||
// It is onscreen, so raycast as a simple occlusion test.
|
||||
|
|
|
|||
|
|
@ -624,6 +624,7 @@ void GuiTSCtrl::onRender(Point2I offset, const RectI &updateRect)
|
|||
// Use the view matrix determined from the control object
|
||||
myTransforms[0] = mLastCameraQuery.cameraMatrix;
|
||||
myTransforms[1] = mLastCameraQuery.cameraMatrix;
|
||||
mLastCameraQuery.headMatrix = mLastCameraQuery.cameraMatrix; // override head
|
||||
|
||||
QuatF qrot = mLastCameraQuery.cameraMatrix;
|
||||
Point3F pos = mLastCameraQuery.cameraMatrix.getPosition();
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@ public:
|
|||
const PFXFrameState &getFrameState() const { return mFrameState[mFrameStateSwitch]; }
|
||||
const PFXFrameState &getLastFrameState() const { return mFrameState[!mFrameStateSwitch]; }
|
||||
|
||||
void setFrameState(const PFXFrameState& newState) { mFrameState[mFrameStateSwitch] = newState; }
|
||||
void setFrameMatrices( const MatrixF &worldToCamera, const MatrixF &cameraToScreen );
|
||||
|
||||
// For ManagedSingleton.
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include "math/mathUtils.h"
|
||||
#include "math/util/frustum.h"
|
||||
#include "gfx/screenshot.h"
|
||||
#include "postFx/postEffectManager.h"
|
||||
|
||||
extern ColorI gCanvasClearColor;
|
||||
|
||||
|
|
@ -603,6 +604,8 @@ void PlaneReflector::updateReflection( const ReflectParams ¶ms )
|
|||
{
|
||||
// Store previous values
|
||||
RectI originalVP = GFX->getViewport();
|
||||
MatrixF origNonClipProjection = gClientSceneGraph->getNonClipProjection();
|
||||
PFXFrameState origPFXState = PFXMGR->getFrameState();
|
||||
|
||||
const FovPort *currentFovPort = GFX->getStereoFovPort();
|
||||
MatrixF inverseEyeTransforms[2];
|
||||
|
|
@ -655,6 +658,8 @@ void PlaneReflector::updateReflection( const ReflectParams ¶ms )
|
|||
// Restore previous values
|
||||
GFX->setFrustum(gfxFrustum);
|
||||
GFX->setViewport(originalVP);
|
||||
gClientSceneGraph->setNonClipProjection(origNonClipProjection);
|
||||
PFXMGR->setFrameState(origPFXState);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -41,6 +41,8 @@
|
|||
// For player object bounds workaround.
|
||||
#include "T3D/player.h"
|
||||
|
||||
#include "postFx/postEffectManager.h"
|
||||
|
||||
extern bool gEditingMission;
|
||||
|
||||
|
||||
|
|
@ -239,6 +241,10 @@ void SceneManager::renderScene( SceneRenderState* renderState, U32 objectMask, S
|
|||
MatrixF originalWorld = GFX->getWorldMatrix();
|
||||
Frustum originalFrustum = GFX->getFrustum();
|
||||
|
||||
// Save PFX & SceneManager projections
|
||||
MatrixF origNonClipProjection = renderState->getSceneManager()->getNonClipProjection();
|
||||
PFXFrameState origPFXState = PFXMGR->getFrameState();
|
||||
|
||||
const FovPort *currentFovPort = GFX->getStereoFovPort();
|
||||
const MatrixF *eyeTransforms = GFX->getStereoEyeTransforms();
|
||||
const MatrixF *worldEyeTransforms = GFX->getInverseStereoEyeTransforms();
|
||||
|
|
@ -255,7 +261,9 @@ void SceneManager::renderScene( SceneRenderState* renderState, U32 objectMask, S
|
|||
|
||||
SceneCameraState cameraStateLeft = SceneCameraState::fromGFX();
|
||||
SceneRenderState renderStateLeft( this, renderState->getScenePassType(), cameraStateLeft );
|
||||
renderStateLeft.getSceneManager()->setNonClipProjection(GFX->getProjectionMatrix());
|
||||
renderStateLeft.setSceneRenderStyle(SRS_SideBySide);
|
||||
PFXMGR->setFrameMatrices(GFX->getWorldMatrix(), GFX->getProjectionMatrix());
|
||||
|
||||
renderSceneNoLights( &renderStateLeft, objectMask, baseObject, baseZone ); // left
|
||||
|
||||
|
|
@ -274,7 +282,9 @@ void SceneManager::renderScene( SceneRenderState* renderState, U32 objectMask, S
|
|||
|
||||
SceneCameraState cameraStateRight = SceneCameraState::fromGFX();
|
||||
SceneRenderState renderStateRight( this, renderState->getScenePassType(), cameraStateRight );
|
||||
renderStateRight.getSceneManager()->setNonClipProjection(GFX->getProjectionMatrix());
|
||||
renderStateRight.setSceneRenderStyle(SRS_SideBySide);
|
||||
PFXMGR->setFrameMatrices(GFX->getWorldMatrix(), GFX->getProjectionMatrix());
|
||||
|
||||
renderSceneNoLights( &renderStateRight, objectMask, baseObject, baseZone ); // right
|
||||
|
||||
|
|
@ -283,6 +293,9 @@ void SceneManager::renderScene( SceneRenderState* renderState, U32 objectMask, S
|
|||
GFX->endField();
|
||||
|
||||
// Restore previous values
|
||||
renderState->getSceneManager()->setNonClipProjection(origNonClipProjection);
|
||||
PFXMGR->setFrameState(origPFXState);
|
||||
|
||||
GFX->setWorldMatrix(originalWorld);
|
||||
GFX->setFrustum(originalFrustum);
|
||||
GFX->setViewport(originalVP);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue