From a92b9d0e2defbf81dc85904555fdb4bc7b561e79 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Thu, 5 Dec 2024 00:17:44 +0000 Subject: [PATCH] code review with az changes per review, frustum wasnt dirty... i like it dirty --- Engine/source/T3D/guiMaterialPreview.cpp | 33 +++++++++++++++++++++++- Engine/source/T3D/guiMaterialPreview.h | 2 +- Engine/source/math/util/frustum.cpp | 1 + 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/guiMaterialPreview.cpp b/Engine/source/T3D/guiMaterialPreview.cpp index e5ada8e25..096490629 100644 --- a/Engine/source/T3D/guiMaterialPreview.cpp +++ b/Engine/source/T3D/guiMaterialPreview.cpp @@ -35,6 +35,7 @@ #include "scene/sceneRenderState.h" #include "renderInstance/renderProbeMgr.h" #include "T3D/lighting/skylight.h" +#include "gfx/gfxDrawUtil.h" // GuiMaterialPreview GuiMaterialPreview::GuiMaterialPreview() @@ -370,7 +371,6 @@ void GuiMaterialPreview::renderWorld(const RectI &updateRect) bool isOrtho; GFX->getFrustum( &left, &right, &bottom, &top, &nearPlane, &farPlane, &isOrtho); mSaveFrustum = Frustum( isOrtho, left, right, bottom, top, nearPlane, farPlane, MatrixF::Identity ); - mSaveFrustum.setTransform(MatrixF::Identity); mSaveProjection = GFX->getProjectionMatrix(); mSaveWorldToScreenScale = GFX->getWorldToScreenScale(); @@ -426,12 +426,43 @@ void GuiMaterialPreview::renderWorld(const RectI &updateRect) renderPass->renderPass( &state ); + if (mMouseState == MovingLight) + { + renderSunDirection(); + } + gClientSceneGraph->setFogData( savedFogData ); // restore fog setting // Make sure to remove our fake sun LIGHTMGR->unregisterAllLights(); } +void GuiMaterialPreview::renderSunDirection() const +{ + // Render four arrows aiming in the direction of the sun's light + ColorI color = LinearColorF(mFakeSun->getColor()).toColorI(); + F32 length = mModel->getShape()->mBounds.len() * 0.8f; + + // Get the sun's vectors + Point3F fwd = mFakeSun->getTransform().getForwardVector(); + Point3F up = mFakeSun->getTransform().getUpVector() * length / 8; + Point3F right = mFakeSun->getTransform().getRightVector() * length / 8; + + // Calculate the start and end points of the first arrow (bottom left) + Point3F start = mModel->getShape()->center - fwd * length - up / 2 - right / 2; + Point3F end = mModel->getShape()->center - fwd * length / 3 - up / 2 - right / 2; + + GFXStateBlockDesc desc; + desc.setZReadWrite(true, true); + + GFXDrawUtil* drawUtil = GFX->getDrawUtil(); + + drawUtil->drawArrow(desc, start, end, color); + drawUtil->drawArrow(desc, start + up, end + up, color); + drawUtil->drawArrow(desc, start + right, end + right, color); + drawUtil->drawArrow(desc, start + up + right, end + up + right, color); +} + // Make sure the orbit distance is within the acceptable range. void GuiMaterialPreview::setOrbitDistance(F32 distance) { diff --git a/Engine/source/T3D/guiMaterialPreview.h b/Engine/source/T3D/guiMaterialPreview.h index 2bf702019..3acafeb14 100644 --- a/Engine/source/T3D/guiMaterialPreview.h +++ b/Engine/source/T3D/guiMaterialPreview.h @@ -75,7 +75,7 @@ protected: Point2I mLastMousePoint; LightInfo* mFakeSun; - + void renderSunDirection() const; public: bool onWake() override; diff --git a/Engine/source/math/util/frustum.cpp b/Engine/source/math/util/frustum.cpp index 2ac1824b7..632d7cded 100644 --- a/Engine/source/math/util/frustum.cpp +++ b/Engine/source/math/util/frustum.cpp @@ -81,6 +81,7 @@ Frustum::Frustum( bool isOrtho, mProjectionOffset.zero(); mProjectionOffsetMatrix.identity(); + mDirty = true; } //-----------------------------------------------------------------------------