示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
 public override void UpdateViewMatrix()
 {
     ViewMatrix = Matrix.LookAtLH(Position, Target, Up);
     _frustum   = Frustum.FromViewProjection(ViewProjectionMatrix);
 }