20

DirectXまたはを使用して 100 個のフローティング キューブを表示したいと考えていますOpenGL

サンプルソースコードか、テクニックの説明を探しています。複数の立方体を正しく表示するのに問題があります。

私は一連の優れたチュートリアルを求めてネットをくまなく調べました。それらはプリミティブの実行方法について説明してい3Dますが、多数の3Dプリミティブ ( cubesspherespyramids、など) の実行方法に関する情報は見つかりません。

4

3 に答える 3

8

あなたは、立方体を 1 つ表示するのに十分な問題があると言っています...表示する立方体があるかどうかはわかりません。

基本的に...キューブを作成するためのコードを1つの関数に入れ、その関数を100回呼び出すだけです。

void DrawCube()
{
    //code to draw the cube
}

void DisplayCubes()
{
    for(int i = 0; i < 10; ++i)
    {   
         for(int j = 0; j < 10; ++j)
         {
             glPushMatrix();
             //alter these values depending on the size of your cubes.
             //This call makes sure that your cubes aren't drawn overtop of each other
             glTranslatef(i*5.0, j*5.0, 0);
             DrawCube();
             glPopMatrix();
         }
    }              
}

これが、これを行う方法の基本的な概要です。より効率的なものが必要な場合は、基本を理解したら、いつか表示リストを調べてください:)

于 2008-08-04T09:12:37.543 に答える
7

glTranslatef (または同等の DirectX) を使用して、同じコードを使用して立方体を描画しますが、描画する相対点を移動します。もっと良い方法があるかもしれませんが、私は OpenGL にかなり慣れていません。それらをすべて見ることができるように、必ず視点を設定してください。

于 2008-08-04T09:04:01.867 に答える
6

ええ、効率が良ければ、すべてを同じ頂点バッファーに入れますが、100個のキューブを描画しても、過去5年間に生成されたGPUがプッシュされるとは思わないので、上記の提案に従ってください。

基本的なパススルー頂点シェーダーを記述します。ピクセルシェーダーで必要に応じてシェーディングします。ワールドマトリックスを渡して頂点シェーダーで変換を行うか、CPU側でワールドスペースの頂点位置を計算します(キューブが固定されたままになる場合はこれを行います)。

ファンシーになってジオメトリインスタンス化などを行うこともできますが、最初に基本を理解するだけです。

于 2008-08-19T11:12:23.777 に答える