Calculate camera view projection each frame so we can have a fixed size viewport.

Signed-off-by: rhhong <rhhong@amazon.com>
Signed-off-by: Gene Walters <genewalt@amazon.com>
This commit is contained in:
rhhong
2021-10-26 14:58:34 -07:00
committed by Gene Walters
parent 3dea8fc03d
commit bf958686c9
3 changed files with 28 additions and 3 deletions
@@ -128,10 +128,10 @@ namespace EMStudio
AZ_Assert(m_gridEntity != nullptr, "Failed to create grid entity.");
AZ::Render::GridComponentConfig gridConfig;
gridConfig.m_gridSize = 4.0f;
gridConfig.m_gridSize = 20.0f;
gridConfig.m_axisColor = AZ::Color(0.5f, 0.5f, 0.5f, 1.0f);
gridConfig.m_primaryColor = AZ::Color(0.3f, 0.3f, 0.3f, 1.0f);
gridConfig.m_secondaryColor = AZ::Color(0.5f, 0.1f, 0.1f, 1.0f);
gridConfig.m_secondaryColor = AZ::Color(0.5f, 0.5f, 0.5f, 1.0f);
auto gridComponent = m_gridEntity->CreateComponent(AZ::Render::GridComponentTypeId);
gridComponent->SetConfiguration(gridConfig);
@@ -6,10 +6,11 @@
*
*/
#include <AzCore/Settings/SettingsRegistry.h>
#include <AzCore/Math/MatrixUtils.h>
#include <AzFramework/Viewport/ViewportControllerList.h>
#include <AzFramework/Viewport/CameraInput.h>
#include <Atom/RPI.Public/ViewportContext.h>
#include <Atom/RPI.Public/View.h>
#include <AtomToolsFramework/Viewport/ModularViewportCameraController.h>
#include <EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h>
@@ -19,6 +20,9 @@
namespace EMStudio
{
static constexpr float DepthNear = 0.01f;
static constexpr float DepthFar = 100.0f;
AnimViewportWidget::AnimViewportWidget(QWidget* parent)
: AtomToolsFramework::RenderViewportWidget(parent)
{
@@ -166,6 +170,24 @@ namespace EMStudio
GetViewportContext()->SetCameraTransform(AZ::Transform::CreateLookAt(cameraPosition, targetPosition));
}
void AnimViewportWidget::OnTick(float deltaTime, AZ::ScriptTimePoint time)
{
RenderViewportWidget::OnTick(deltaTime, time);
CalculateCameraProjection();
}
void AnimViewportWidget::CalculateCameraProjection()
{
auto viewportContext = GetViewportContext();
auto windowSize = viewportContext->GetViewportSize();
const float aspectRatio = aznumeric_cast<float>(windowSize.m_width) / aznumeric_cast<float>(windowSize.m_height);
AZ::Matrix4x4 viewToClipMatrix;
AZ::MakePerspectiveFovMatrixRH(viewToClipMatrix, AZ::Constants::HalfPi, aspectRatio, DepthNear, DepthFar, true);
viewportContext->GetDefaultView()->SetViewToClipMatrix(viewToClipMatrix);
}
void AnimViewportWidget::ToggleRenderFlag(EMotionFX::ActorRenderFlag flag)
{
m_renderFlags[flag] = !m_renderFlags[flag];
@@ -30,6 +30,9 @@ namespace EMStudio
EMotionFX::ActorRenderFlagBitset GetRenderFlags() const;
private:
void OnTick(float deltaTime, AZ::ScriptTimePoint time) override;
void CalculateCameraProjection();
void SetupCameras();
void SetupCameraController();