Platform SDK: DirectX |
ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「Direct3D 直接モードの C/C++ チュートリアル」を参照すること。
このチュートリアルでは、アプリケーション定義サブルーチン FrameMove を使って、円を中心に視点を回転する。通常、次のコードに示すように、視点は 3 つの D3DVECTOR 型、視点、注視点、および正方向を定義するベクトルによって定義される。
Dim vEyePt As D3DVECTOR, _ vLookatPt As D3DVECTOR, _ vUpVec As D3DVECTOR vEyePt = MakeVector(5 * Sin(stepVal), 3, 5 * Cos(stepVal)) vLookatPt = MakeVector(4 * Sin(stepVal + 0.1), 2.5, 4 * Cos(stepVal + 0.1)) vUpVec = MakeVector(0, 1, 0)
ここで、3 つのベクトルを使って、新しいビュー行列を作成して設定することができる。
Dim matView As D3DMATRIX Call g_dx.ViewMatrix(matView, vEyePt, vLookatPt, vUpVec, stepVal / 360) g_d3dDevice.SetTransform D3DTRANSFORMSTATE_VIEW, matView
上記のコードでは、新しいカメラ位置を DirectX7.ViewMatrix メソッドに渡すことによって、レンダリングされたシーンのフレームごとに新しいビュー行列を作成する。次に、Direct3DDevice7.SetTransform メソッドが、デバイスに新しく生成されたビュー行列を設定する。stepValue の値 (アプリケーション定義メソッド FrameMove に渡された値) によって、視点を 1 度ずつ回転する。これにより、壁セグメントと円錐が 360 度回転したように見える。
これで、シーンはほぼ完成であるが、さらに、立方体の頂点を手動で回転、平行移動、スケールする必要がある。最初に、DirectX7.CreateD3DTLVertex メソッドを使って、D3DTLVERTEX 型に立方体の未トランスフォーム データを埋め込む。DirectX7.CreateD3DTLVertex の最初の 3 つのパラメータは、各頂点の未トランスフォーム位置座標をスクリーン座標で表す。
g_dx.CreateD3DTLVertex -1, -1, -1, 0, &HFFFFFF, 0, 0, 0, g_vCube(0) g_dx.CreateD3DTLVertex 1, -1, -1, 0, &HFF&, 0, 0, 0, g_vCube(1) g_dx.CreateD3DTLVertex -1, 1, -1, 0, &HFF00&, 0, 0, 0, g_vCube(2) g_dx.CreateD3DTLVertex 1, 1, -1, 0, &HFF0000, 0, 0, 0, g_vCube(3) g_dx.CreateD3DTLVertex -1, -1, 1, 0, &HFFFF&, 0, 0, 0, g_vCube(4) g_dx.CreateD3DTLVertex 1, -1, 1, 0, &HFF0066, 0, 0, 0, g_vCube(5) g_dx.CreateD3DTLVertex -1, 1, 1, 0, &H9966FF, 0, 0, 0, g_vCube(6) g_dx.CreateD3DTLVertex 1, 1, 1, 0, &HFF00FF, 0, 0, 0, g_vCube(7)
ここで、立方体の 8 つの頂点をトランスフォームできる。
Call TransformVertices(g_d3dDevice, g_vCube, NUM_CUBE_VERTICES)
立方体の頂点は、アプリケーション定義関数 TransformVertices によってトランスフォームされる。このトランスフォームについては、「ステップ 2.2 : 3D トランスフォームを実行する」で説明する。