マップの中心がorigo(0,0,0)の場合、これは簡単になります。
まず、デフォルトのカメラ位置をVector3 CameraOffsetに保存し、次に回転行列を使用して位置を計算します。レディアンの90*は円周率の半分なので、PiOverTwoを使用します。また、列挙型を使用して、ポイントする方向を決定するので、次のように言うことができます
Camera.Orientation = Orientation.East;
そしてカメラはそれ自体を修正する必要があります:)
public enum Orientation
{
North, East, South, West
}
カメラで:
public Vector3 Position { get; protected set; }
Vector3 _CameraOffset = new Vector3(0, 20, 20);
public Vector3 CameraOffset
{
get
{
return _Orientation;
}
set
{
_Orientation = value;
UpdateOrientation();
}
}
Orientation _Orientation = Orientation.North;
public Orientation Orientation
{
get
{
return _Orientation;
}
set
{
_Orientation = value;
UpdateOrientation();
}
}
private void UpdateOrientation()
{
Position = Vector3.Transform(CameraOffset, Matrix.CreateRotationY(MathHelper.PiOverTwo * (int)Orientation));
}
ポジション間の滑走運動が必要な場合は、私もお手伝いできると思います;)
カメラがVector3.Zeroに焦点を合わせておらず、その周りを回転してはならない場合は、次のように変更する必要があります。
Position = Vector3.Transform(CameraOffset, Matrix.CreateRotationY(MathHelper.PiOverTwo * (int)Orientation));
に:
Position = Vector3.Transform(CameraOffset, Matrix.CreateRotationY(MathHelper.PiOverTwo * (int)Orientation) * Matrix.CreateTranslation(FocusPoint));
ここで、FocusPointは、回転する3Dのポイント(世界の中心)です。また、Camera.Update()でUpdateOrientation()を呼び出すと、カメラを動かす方法もわかります;)
編集; 申し訳ありませんが、2Dを使用するという点を完全に見逃しました。私が助けることができるかどうかを確認するために後で戻ってきます:P