namespace Engine.Core; /// /// Represents a 3D camera in the engine. /// public interface ICamera3D : IBehaviour3D { /// /// Event triggered when the near plane of the changes. /// Event OnNearPlaneChanged { get; } /// /// Event triggered when the far plane of the changes. /// Event OnFarPlaneChanged { get; } /// /// Event triggered when the field of view of the changes. /// Event OnFieldOfViewChanged { get; } /// /// Near plane distance of the camera. /// float NearPlane { get; set; } /// /// Far plane distance of the camera. /// float FarPlane { get; set; } /// /// Field of View (FOV) value of the camera in degrees. /// float FieldOfView { get; set; } /// /// Converts a position from screen coordinates to a . /// /// The position in screen coordinates. /// The originating from the camera to the screen position in world coordinates. Ray3D ScreenToWorldRay(Vector2D screenPosition); /// /// Converts a position from world coordinates to screen coordinates. /// /// The position in world coordinates. /// The position in screen coordinates. Vector2D WorldToScreenPosition(Vector3D worldPosition); readonly record struct NearPlaneChangedArguments(float PreviousNearPlane); readonly record struct FarPlaneChangedArguments(float PreviousFarPlane); readonly record struct FieldOfViewChangedArguments(float PreviousFieldOfView); }