Platform SDK: DirectX |
ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「Direct3D 直接モードの C/C++ チュートリアル」を参照すること。
このチュートリアルでは、D3DVERTEX 型のシーンにおける壁セグメントについて説明する。この頂点は、「未トランスフォーム 未ライティングの頂点」である。「未トランスフォーム 未ライティングの頂点」を使用すると、Direct3D が独自の内部アルゴリズムを使ってトランスフォーム & ライティング処理を実行するように要求することができる。
3D 空間で壁セグメントを定義するには、サンプル DrawPrims の以下のコードに示す方法で、頂点の情報を計算して保存する。
Private Sub InitGeometry() ' 壁ジオメトリをセット アップする Dim x As Double, _ y As Double, _ z As Double Dim i As Integer For i = 0 To NUM_WALL_SIDES - 1 x = Sin(2 * pi * i / (NUM_WALL_SIDES - 1)) z = Cos(2 * pi * i / (NUM_WALL_SIDES - 1)) Call g_dx.CreateD3DVertex(x * 10#, -0.1 * 10#, z * 10#, -x, 0, -z, 0, 0, g_vWall(2 * i + 0)) Call g_dx.CreateD3DVertex(x * 10#, 0.1 * 10#, z * 10#, -x, 0, -z, 0, 0, g_vWall(2 * i + 1)) Next i
上記のコードでは、DirectX7.CreateD3DVertex メソッドを使って、D3DVERTEX 型の配列 g_vWall に頂点成分情報を埋め込む。このコードでは、三角関数を使って頂点の x 座標と z 座標を決める。CreateD3DVertex メソッドを使用する場合、モデル座標で座標を指定する必要がある。「未トランスフォーム 未ライティングの頂点」を使用するので、システムはモデル座標にワールド トランスフォーム、ビュー トランスフォーム、および射影トランスフォームを適用し、シーン内の適切な位置に配置する。また、頂点の x、y、および z 座標を 10 でスケールして、壁セグメントを適切なサイズにする。
シーン内の壁セグメントのジオメトリを定義したら、その他のジオメトリ プリミティブの準備に進むことができる。オブジェクトを定義する順序を意識する必要はない。
3D 空間での円錐の定義については、「ステップ 1.2 : 円錐を準備する」で説明する。