Add scene viewport move gizmo workflow
This commit is contained in:
@@ -48,9 +48,11 @@ bool IsPowerOfTenSpacing(float value) {
|
||||
} // namespace
|
||||
|
||||
using XCEngine::Editor::BuildSceneGridParameters;
|
||||
using XCEngine::Editor::BuildSceneViewportAxisDragPlaneNormal;
|
||||
using XCEngine::Editor::SceneViewportCameraController;
|
||||
using XCEngine::Editor::BuildSceneViewportProjectionMatrix;
|
||||
using XCEngine::Editor::BuildSceneViewportViewMatrix;
|
||||
using XCEngine::Editor::ProjectSceneViewportWorldPoint;
|
||||
using XCEngine::Editor::SceneGridParameters;
|
||||
using XCEngine::Editor::SceneViewportOverlayData;
|
||||
using XCEngine::Components::GameObject;
|
||||
@@ -219,3 +221,34 @@ TEST(SceneViewportOverlayRenderer_Test, ViewMatrixMatchesSceneCameraTransformCon
|
||||
cameraObject.GetTransform()->GetWorldToLocalMatrix(),
|
||||
1e-3f));
|
||||
}
|
||||
|
||||
TEST(SceneViewportOverlayRenderer_Test, ProjectSceneViewportWorldPointMapsOriginToViewportCenter) {
|
||||
SceneViewportOverlayData overlay = {};
|
||||
overlay.valid = true;
|
||||
overlay.cameraPosition = Vector3(0.0f, 0.0f, -5.0f);
|
||||
overlay.cameraForward = Vector3::Forward();
|
||||
overlay.cameraRight = Vector3::Right();
|
||||
overlay.cameraUp = Vector3::Up();
|
||||
overlay.verticalFovDegrees = 60.0f;
|
||||
overlay.nearClipPlane = 0.03f;
|
||||
overlay.farClipPlane = 2000.0f;
|
||||
|
||||
const auto projected = ProjectSceneViewportWorldPoint(overlay, 800.0f, 600.0f, Vector3::Zero());
|
||||
|
||||
EXPECT_TRUE(projected.visible);
|
||||
EXPECT_NEAR(projected.screenPosition.x, 400.0f, 1e-3f);
|
||||
EXPECT_NEAR(projected.screenPosition.y, 300.0f, 1e-3f);
|
||||
}
|
||||
|
||||
TEST(SceneViewportOverlayRenderer_Test, BuildSceneViewportAxisDragPlaneNormalFallsBackWhenForwardAlignsWithAxis) {
|
||||
SceneViewportOverlayData overlay = {};
|
||||
overlay.valid = true;
|
||||
overlay.cameraForward = Vector3::Right();
|
||||
overlay.cameraRight = Vector3::Back();
|
||||
overlay.cameraUp = Vector3::Up();
|
||||
|
||||
Vector3 planeNormal = Vector3::Zero();
|
||||
ASSERT_TRUE(BuildSceneViewportAxisDragPlaneNormal(overlay, Vector3::Right(), planeNormal));
|
||||
EXPECT_NEAR(Vector3::Dot(planeNormal, Vector3::Right()), 0.0f, 1e-4f);
|
||||
EXPECT_GT(planeNormal.SqrMagnitude(), 0.5f);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user