移動・回転・拡大縮小の処理とその演算

Matrixクラスのメソッドにより行列計算を行い、DeviceクラスのTransformプロパティのWorldプロパティに設定します。

Device.Transformプロパティ
public Transforms Transform { get; }
Transforms.Worldプロパティ
public Matrix World { get; set; }

平行移動 (Translation)

オフセットを指定して行列を作成します。

静的メソッド
public static Matrix Translation( Vector3 v );
インスタンス メソッド
public void Translate( Vector3 v );

x、y、zの要素を持つ3次元ベクトル (Vector3) を引数に取り、

のような行列を作成します。

サンプルコード

// 原点に設定
device.Transform.World = Matrix.Identity;

// 座標 ( 1.0, 2.0, 3.0 ) へ移動
device.Transform.World *= Matrix.Translation( 1.0f, 2.0f, 3.0f );

回転 (Rotation)

指定の軸を回転軸にして回転する行列を作成

回転軸 メソッド 作成される行列
X軸 RotationX RotateX
Y軸 RotationY RotateY
Z軸 RotationZ RotateZ
任意の軸 RotationAxis RotateAxis  
※φ、θ、ψはそれぞれX軸、Y軸、Z軸まわりの回転角

RotationX系は静的メソッドで、回転後の新しいMatrix構造体を返します。
RotateX系は、その行列自体を回転させます。

静的メソッド
public static Matrix RotationX( float angle );
public static Matrix RotationAxis(
    Vector3 axisRotation,
    float angle
    );
インスタンス メソッド
public void RotateX( float angle );
public void RotateAxis(
    Vector3 axisRotation,
    float angle
    );

サンプルコード

device.Transform.World *= Matrix.RotationX(
    Geometry.DegreeToRadian( 90.0f ) );

角度を指定して行列を作成

ヨー、ピッチ、およびロールを指定して行列を作成します。

静的メソッド
public static Matrix RotationYawPitchRoll(
    float yaw,
    float pitch,
    float roll
    );
インスタンス メソッド
public void RotateYawPitchRoll(
    float yaw,
    float pitch,
    float roll
    );

拡大縮小 (Scaling)

x軸、y軸、z軸に沿ってスケーリングする行列を作成します。

静的メソッド
public static Matrix Scaling( Vector3 v );
インスタンス メソッド
public void Scale( Vector3 v );

移動・回転・拡大縮小の順番

移動、回転、拡大縮小の処理はすべて行列の演算で行われるため、処理の順番によって異なる結果となります。

// 原点に初期化
device.Transform.World = Matrix.Identity;

// 拡大縮小
device.Transform.World *= Matrix.Scaling( 2.0f, 2.0f, 2.0f );

// 回転
device.Transform.World *= Matrix.RotationX( Geometry.DegreeToRadian( 90.0f ) );

// 移動
device.Transform.World *= Matrix.Translation( 1.0f, 2.0f, 3.0f );