using Engine.Graphics.Camera; using Engine.Graphics.Pipeline; using OpenTK.Mathematics; namespace Engine.Scene.Component.BuiltIn; public abstract class Camera( float parNearPlane, float parFarPlane ) : Component, ICamera { public float AspectRatio { get; private set; } = 1; public float NearPlane { get; set; } = parNearPlane; public float FarPlane { get; set; } = parFarPlane; public RenderLayer RenderLayer { get; set; } = RenderLayer.DEFAULT; private Vector2i _screenSize = new(1, 1); public abstract Matrix4 View { get; } public abstract Matrix4 Projection { get; } public Vector2i ScreenSize { get => _screenSize; set { _screenSize = value; AspectRatio = (float)value.X / value.Y; } } public abstract Vector3 ScreenToWorld(Vector2 parScreenPosition); public abstract Vector2 WorldToScreen(Vector3 parWorldPosition); }