// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. namespace FlaxEngine { partial struct RenderView { /// /// Initializes this view with default options. /// public void Init() { MaxShadowsQuality = Quality.Ultra; ModelLODDistanceFactor = 1.0f; ModelLODDistanceFactorSqrt = 1.0f; ShadowModelLODDistanceFactor = 1.0f; Flags = ViewFlags.DefaultGame; Mode = ViewMode.Default; } /// /// Updates the cached data for the view (inverse matrices, etc.). /// public void UpdateCachedData() { Matrix.Invert(ref View, out IV); Matrix.Invert(ref Projection, out IP); Matrix.Multiply(ref View, ref Projection, out var viewProjection); Frustum = new BoundingFrustum(viewProjection); Matrix.Invert(ref viewProjection, out IVP); CullingFrustum = Frustum; } /// /// Initializes render view data. /// /// The view. /// The projection. public void SetUp(ref Matrix view, ref Matrix projection) { Position = view.TranslationVector; Projection = projection; NonJitteredProjection = projection; TemporalAAJitter = Vector4.Zero; View = view; UpdateCachedData(); } /// /// Set up view for projector rendering. /// /// Near plane /// Far plane /// Camera's position /// Camera's direction vector /// Camera's up vector /// Camera's FOV angle (in degrees) public void SetProjector(float nearPlane, float farPlane, Vector3 position, Vector3 direction, Vector3 up, float angle) { // Copy data Near = nearPlane; Far = farPlane; Position = position; // Create projection matrix Matrix.PerspectiveFov(angle * Mathf.DegreesToRadians, 1.0f, nearPlane, farPlane, out Projection); NonJitteredProjection = Projection; TemporalAAJitter = Vector4.Zero; // Create view matrix Direction = direction; Vector3 target = Position + Direction; Matrix.LookAt(ref Position, ref target, ref up, out View); UpdateCachedData(); } /// /// Copies render view data from the camera. /// /// The camera. public void CopyFrom(Camera camera) { Position = camera.Position; Direction = camera.Direction; Near = camera.NearPlane; Far = camera.FarPlane; View = camera.View; Projection = camera.Projection; NonJitteredProjection = Projection; TemporalAAJitter = Vector4.Zero; UpdateCachedData(); } /// /// Copies render view data from the camera. /// /// The camera. /// The custom viewport to use for view/projeection matrices override. public void CopyFrom(Camera camera, ref Viewport customViewport) { Position = camera.Position; Direction = camera.Direction; Near = camera.NearPlane; Far = camera.FarPlane; camera.GetMatrices(out View, out Projection, ref customViewport); NonJitteredProjection = Projection; TemporalAAJitter = Vector4.Zero; UpdateCachedData(); } } }