diff --git a/src/AcDream.App/Rendering/ICamera.cs b/src/AcDream.App/Rendering/ICamera.cs new file mode 100644 index 0000000..3aeaf98 --- /dev/null +++ b/src/AcDream.App/Rendering/ICamera.cs @@ -0,0 +1,10 @@ +using System.Numerics; + +namespace AcDream.App.Rendering; + +public interface ICamera +{ + Matrix4x4 View { get; } + Matrix4x4 Projection { get; } + float Aspect { get; set; } +} diff --git a/src/AcDream.App/Rendering/OrbitCamera.cs b/src/AcDream.App/Rendering/OrbitCamera.cs index 95f9977..43f2c96 100644 --- a/src/AcDream.App/Rendering/OrbitCamera.cs +++ b/src/AcDream.App/Rendering/OrbitCamera.cs @@ -2,7 +2,7 @@ using System.Numerics; namespace AcDream.App.Rendering; -public sealed class OrbitCamera +public sealed class OrbitCamera : ICamera { public Vector3 Target { get; set; } = new(96, 96, 0); // center of a 192x192 landblock public float Distance { get; set; } = 300f; diff --git a/src/AcDream.App/Rendering/StaticMeshRenderer.cs b/src/AcDream.App/Rendering/StaticMeshRenderer.cs index 12b7a8b..424eb8b 100644 --- a/src/AcDream.App/Rendering/StaticMeshRenderer.cs +++ b/src/AcDream.App/Rendering/StaticMeshRenderer.cs @@ -73,7 +73,7 @@ public sealed unsafe class StaticMeshRenderer : IDisposable }; } - public void Draw(OrbitCamera camera, IEnumerable entities) + public void Draw(ICamera camera, IEnumerable entities) { _shader.Use(); _shader.SetMatrix4("uView", camera.View); diff --git a/src/AcDream.App/Rendering/TerrainRenderer.cs b/src/AcDream.App/Rendering/TerrainRenderer.cs index c82eda0..11cd851 100644 --- a/src/AcDream.App/Rendering/TerrainRenderer.cs +++ b/src/AcDream.App/Rendering/TerrainRenderer.cs @@ -55,7 +55,7 @@ public sealed unsafe class TerrainRenderer : IDisposable _landblocks.Add(gpu); } - public void Draw(OrbitCamera camera) // ICamera in Task 5 + public void Draw(ICamera camera) { _shader.Use(); _shader.SetMatrix4("uView", camera.View);