方法 : カメラを移動および目標を定める

更新 : 2007 年 11 月

ビュー変換を使用して、Direct3D シーンでカメラを移動し目標を定めることができます。

Bb397833.alert_note(ja-jp,VS.90).gifメモ :

マネージ Direct3D モバイル アプリケーションでは、Windows Mobile Version 5.0 Software for Pocket PC と Windows Mobile Version 5.0 Software for Smartphone が必要です。Windows Mobile ソフトウェアおよび SDK については、「.NET Compact Framework の外部資料」を参照してください。

ビュー変換は、Direct3D オブジェクトをワールド空間からスクリーン空間に変換します。ビュー変換を実行すると、カメラ (またはビューア) の位置の情報、カメラの撮影対象、および座標系を使用して画面上への表示結果を操作し、ワールド空間座標をスクリーン空間座標に正しく変換できます。

ワールド空間は、仮想の観察者から見て、Y 軸の値の正が上方向、X 軸の値の正が右方向、Z 軸の値の正が奥方向になる、左手座標系に基づいています。逆に、右手座標系は、Z 軸の値の正が観察者の方向になります。

デバイスの Transform プロパティは、変換の状態を示す Matrix 構造体を返します。カメラを移動したり目標を定めたりするには、変換を処理する LookAtLH メソッドを使用してビュー変換行列をデバイス オブジェクトに渡します。

次の例では、カメラは最初に Z 軸の正の位置に当たるシーンの背面で撮影を開始し、原点の近くに目標を定めます。カメラはシーンの背面にあるため、Z 軸の正の値の位置に配置するオブジェクトはカメラから遠ざかるのではなく近づきます。また、X 軸の正の値の位置に配置するオブジェクトは右側ではなく左側から遠ざかります。

使用例

船を表す基本的な四角形のメッシュをアニメーション表示するアプリケーションに対してビュー変換を実行するコード例を次に示します。完全なプログラム例については、「方法 : Direct3D オブジェクトを変換する」を参照してください。

このコード例には、次のオブジェクトが含まれています。

  • 船を表す基本的な Mesh オブジェクト。

  • Device オブジェクト。

' Set up the view matrix. You can define a view matrix with a camera position,
' a point to look at (camera target), and an "up" direction.
' First vector passed to LookAtLH is the camera position.
' Second vector passed to LookAtLH is the camera target.
' Third vector passed to LookAtLH defines the "up" direction.
' In this example, you set the camera seven units up along the z-axis ("behind"
' the scene), down one unit, and left two units. You then point the camera
' just above the origin and define "up" to be in the y-direction.
If Not isShipDeparted Then
    device.Transform.View = Matrix.LookAtLH(New Vector3(- 2, - 1, 7), New Vector3(0, 1, 0), New Vector3(0, 1, 0))
Else
    ' Handles movement of camera after 
    ' the ship "fires" the main engines.
    device.Transform.View = Matrix.LookAtLH(New Vector3(xCameraPosition, yCameraPosition, 7), New Vector3(0, 1, 0), New Vector3(0, 1, 0))
    xCameraPosition += 0.01F
    yCameraPosition += 0.01F
End If
// Set up the view matrix. You can define a view matrix with a camera position,
// a point to look at (camera target), and an "up" direction.
// First vector passed to LookAtLH is the camera position.
// Second vector passed to LookAtLH is the camera target.
// Third vector passed to LookAtLH defines the "up" direction.
// Here, you set the camera seven units up along the z-axis ("behind"
// the scene), down one unit, and left two units. You then point the camera
// just above the origin and define "up" to be in the y-direction.
if (!isShipDeparted)
{
    device.Transform.View = Matrix.LookAtLH(new Vector3(-2, -1, 7),
        new Vector3(0, 1, 0), new Vector3(0, 1, 0));
}
else
{
    // Handles movement of camera after 
    // the ship "fires" the main engines.
    device.Transform.View = Matrix.LookAtLH(new Vector3(xCameraPosition, 
        yCameraPosition, 7), new Vector3(0, 1, 0), new Vector3(0, 1, 0));
    xCameraPosition += 0.01f;
    yCameraPosition += 0.01f;
}

コードのコンパイル方法

この例には、「方法 : Direct3D オブジェクトを変換する」の完全なサンプル コードが必要です。

参照

概念

.NET Compact Framework に関する「方法」トピック

その他の技術情報

.NET Compact Framework での Mobile Direct3D プログラミング