Merge pull request #5026 from aws-lumberyard-dev/animation/rhhong/camera_fix_size
Calculate camera view projection each frame
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -166,6 +167,26 @@ 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();
|
||||
// Prevent devided by zero
|
||||
const float height = AZStd::max<float>(aznumeric_cast<float>(windowSize.m_height), 1.0f);
|
||||
const float aspectRatio = aznumeric_cast<float>(windowSize.m_width) / 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();
|
||||
|
||||
@@ -42,6 +45,8 @@ namespace EMStudio
|
||||
void ToggleRenderFlag(EMotionFX::ActorRenderFlag flag);
|
||||
|
||||
static constexpr float CameraDistance = 2.0f;
|
||||
static constexpr float DepthNear = 0.01f;
|
||||
static constexpr float DepthFar = 100.0f;
|
||||
|
||||
AZStd::unique_ptr<AnimViewportRenderer> m_renderer;
|
||||
AZStd::shared_ptr<AzFramework::RotateCameraInput> m_rotateCamera;
|
||||
|
||||
Reference in New Issue
Block a user