0

ターゲットカメラをフォローに変更するには?

目標:

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;


namespace Flight
{
    public class FollowCamera : CCamera
    {

        public Vector3 Target { get; set; }

        public FollowCamera(Vector3 Position, Vector3 Target,
                    GraphicsDevice graphicsDevice)
            : base(graphicsDevice)
        {
            this.Position = Position;
            this.Target = Target;
        }

        public override void Update()
        {
            //Missing lines of code used to determine 
            //the up vector
            Vector3 forward = Target - Position;
            Vector3 right = Vector3.Cross(forward, Vector3.Up);
            Vector3 up = Vector3.Cross(right, forward);

            this.View = Matrix.CreateLookAt(Position,
                    Target, up);
        }
    }

}

私は、このコード行をいくつか変更して使用し、さらにカメラがターゲットからどれだけ離れているかを追加する手がかりを持っています。このコード行により、船が画面の周りに移動し、カメラが船と一緒に移動することを確認する必要があります。助けてください

 this.local = Matrix.CreateFromYawPitchRoll(orientation.Y, orientation.X, orientation.Z) * Matrix.CreateTranslation(position.X, position.Y, position.Z) * this.local;
4

1 に答える 1

0

カメラを船に取り付け、カメラの位置を計算し、その位置でターゲットを設定する必要があります

interface IPositionable { Vector3 Position }


class FollowCamera{

    public IPositionable ObjectToFollow;

    public FollowCamera(Vector3 RelativePosition)
    {
        this.RelativePosition = relativePosition
    }

    public override void Update()
    {
        //Missing lines of code used to determine 
        //the up vector
        Vector3 forward = Target - Position;
        Vector3 right = Vector3.Cross(forward, Vector3.Up);
        Vector3 up = Vector3.Cross(right, forward);

        Position = ObjectToFollow.Position - RelativePosition;
        Target = ObjectToFollow.Position;

        this.View = Matrix.CreateLookAt(Position,
                Target, up);
    }
}

船の前方ベクトルを考慮し、この値をイージング関数で補間すると、動きが非常にクールでスムーズになります。

于 2012-11-21T16:12:15.667 に答える