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