using OpenTK.Mathematics; namespace fluidsC_; public class Camera { public Vector3 Position; public float AspectRatio; public Vector3 Front = -Vector3.UnitZ; public Vector3 Up = Vector3.UnitY; public Vector3 Right = Vector3.UnitX; public float Pitch; public float Yaw = -MathHelper.PiOver2; public float Speed = 2.5f; public float Sensitivity = 0.002f; public Camera(Vector3 position, float aspectRatio) { Position = position; AspectRatio = aspectRatio; UpdateVectors(); } public Matrix4 GetViewMatrix() { return Matrix4.LookAt(Position, Position + Front, Up); } public Matrix4 GetProjectionMatrix() { return Matrix4.CreatePerspectiveFieldOfView(MathHelper.PiOver4, AspectRatio, 0.01f, 100.0f); } public void UpdateVectors() { // Calculate the new Front vector Front.X = MathF.Cos(Yaw) * MathF.Cos(Pitch); Front.Y = MathF.Sin(Pitch); Front.Z = MathF.Sin(Yaw) * MathF.Cos(Pitch); Front = Vector3.Normalize(Front); // Also re-calculate the Right and Up vector Right = Vector3.Normalize(Vector3.Cross(Front, Vector3.UnitY)); Up = Vector3.Normalize(Vector3.Cross(Right, Front)); } }