Platform SDK: DirectX

ステップ 1.1 : 壁セグメントを準備する

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic チュートリアル」を参照すること。

[C++]

チュートリアル「さまざまなプリミティブ スタイルを使用する」では、「未トランスフォーム 未ライティングの頂点」である 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 : 円錐を準備する」で説明する。