public override void UpdateViewMatrix() { var r = Right; var l = Look; var p = Position; l = Vector3.Normalize(l); var u = Vector3.Normalize(Vector3.Cross(l, r)); r = Vector3.Cross(u, l); var x = -Vector3.Dot(p, r); var y = -Vector3.Dot(p, u); var z = -Vector3.Dot(p, l); Right = r; Up = u; Look = l; ViewMatrix = new Matrix { Row1 = new Vector4(r.X, u.X, l.X, 0), Row2 = new Vector4(r.Y, u.Y, l.Y, 0), Row3 = new Vector4(r.Z, u.Z, l.Z, 0), Row4 = new Vector4(x, y, z, 1) }; _frustum = Frustum.FromViewProjection(ViewProjectionMatrix); }
public override void UpdateViewMatrix() { var sideRadius = _radius * MathF.Cos(_beta); var height = _radius * MathF.Sin(_beta); Position = new Vector3( Target.X + sideRadius * MathF.Cos(_alpha), Target.Y + height, Target.Z + sideRadius * MathF.Sin(_alpha) ); if (HeightFunc != null && Position.Y <= HeightFunc(Position.X, Position.Z) + 2.0f) { Position = new Vector3(Position.X, HeightFunc(Position.X, Position.Z) + 2.0f, Position.Z); } ViewMatrix = Matrix.LookAtLH(Position, Target, Vector3.UnitY); Right = new Vector3(ViewMatrix.M11, ViewMatrix.M21, ViewMatrix.M31); Right.Normalize(); Look = new Vector3(ViewMatrix.M13, ViewMatrix.M23, ViewMatrix.M33); Look.Normalize(); _frustum = Frustum.FromViewProjection(ViewProjectionMatrix); }
public override void UpdateViewMatrix() { ViewMatrix = Matrix.LookAtLH(Position, Target, Up); _frustum = Frustum.FromViewProjection(ViewProjectionMatrix); }