デバイスのプロパティ Device.Transform.View に、Matrix インスタンスを指定することで設定可能。
// 左手座標の視点マトリクスを構築する
public static Matrix Matrix.LookAtLH(
Vector3 cameraPosition, // カメラの位置。
Vector3 cameraTarget, // カメラの見ている位置。
Vector3 cameraUpVector // カメラの頭の方向(例: 正立は new Vector3(0f,1f,0f), 倒立は new Vector3(0f,-1f,0f)). 方向を指定する目的なので、ベクトルの大きさは問わない
)
例:
Device device;
// ..中略..
// 座標 (0,0,-10) から正立状態で 座標 (0,0,0) を見る
device.Transform.View = Matrix.LookAtLH(
new Vector3(0f, 0f, -10.0f),
new Vector3(0f,0f,0f),
new Vector3(0f,1f,0f) );
);
実際に表示するには、さらに 3D から 2D への投影の設定を行う必要があります。
この設定を行うには Device.Transform.Projection プロパティに Matrix インスタンスを指定します。
// 左手座標のパースペクティブマトリクスを構築する
public Matrix Matrix.PerspectiveFovLH(
float fieldOfViewY, // (カメラから見て) Y軸方向の視野。ラジアンで指定する。(1/4 π == 45度 くらいが適切)
float aspectRatio, // 2Dに変換後の画面のアスペクト比(横幅 ÷ 縦幅) (例: 高さも幅も同じなら 1.0f, 汎用:(float)device.Viewport.Width / (float)device.Viewport.Height )
float znearPlane, // (カメラから見た)可視範囲のうち、最も近い距離(1.0f)
float zfarPlane // (カメラから見た)可視範囲のうち、最も遠い距離 (100.0f)
);
例:
Device device;
// …中略…
device.Transform.View = … // 略
// 上下角度45度で奥行き 1.0f 前方から 100.0f 前方までの範囲を表示する
device.Transform.Projection = Matrix.PerspectiveFovLH(
(float) Math.PI / 4,
(float) device.Viewport.Width / device.Viewport.Height,
1.0f, 100.0f );
ちなみに、Matrix.PerspectiveForLH ではなくて Matrix.PerspectiveFovLH なので注意してください。for でなく fov です。
参考:
– チュートリアル3 行列の使い方(MSDN Direct3D)
– Matrix.LookAtLH メソッド(MSDN)
– ビュー行列を設定する(MSDN)
– Matrix.PerspectiveFovLH メソッド