Platform SDK: DirectX |
ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic チュートリアル」を参照すること。
チュートリアル「さまざまなプリミティブ スタイルを使用する」では、「未トランスフォーム 未ライティングの頂点」である D3DVERTEX 構造体を使用してシーンの壁セグメントを記述する。「未トランスフォーム 未ライティングの頂点」を使用すると、Direct3D で独自の内部アルゴリズムによってトランスフォーム & ライティング処理を実行するように要求できる。
3D 空間で各壁セグメントを定義するには、次の DrawPrims アプリケーションのコードで示すように、1 組の頂点情報を計算して結果を保存する。
HRESULT App_InitDeviceObjects( LPDIRECT3DDEVICE7 pd3dDevice ) { DWORD i; for( i=0; i<NUM_WALL_SIDES; i++ ) { FLOAT x = (FLOAT)sin( 2*g_PI*i/(NUM_WALL_SIDES-1) ); FLOAT z = (FLOAT)cos( 2*g_PI*i/(NUM_WALL_SIDES-1) ); g_pvWall[2*i+0] = D3DVERTEX( 10.0f * D3DVECTOR( x, -0.1f, z ), D3DVECTOR( -x, 0, -z ), 0, 0 ); g_pvWall[2*i+1] = D3DVERTEX( 10.0f * D3DVECTOR( x, 0.1f, z ), D3DVECTOR( -x, 0, -z ), 0, 0 ); }
上記のコードでは、D3DVERTEX 構造体の配列 g_pvWall に頂点成分データを格納している。また、三角関数を使用して頂点の x 座標および z 座標を決めている。D3DVERTEX 構造体では、モデル座標に座標を指定する必要がある。「未トランスフォーム 未ライティングの頂点」を使用しているため、モデル座標にはワールド トランスフォーム、ビュー トランスフォーム、および射影トランスフォームが適用されてシーン内に適切に配置される。また、頂点の x、y、および z 座標を 10 ずつスケーリングして壁セグメントを適切なサイズに設定する。
シーンの壁セグメントにジオメトリを定義した後、別のジオメトリ プリミティブである円錐を準備する。この場合も、特定のオブジェクトの定義順序は重要ではない。
3D 空間での円錐の定義については、「ステップ 1.2 : 円錐を準備する」で説明する。