DirectX または OpenGL を使用して 100 個のフローティング キューブを表示する
-
08-06-2019 - |
質問
を使用して 100 個の浮遊立方体を表示したいと考えています DirectX
または OpenGL
.
サンプル ソース コードまたはテクニックの説明を探しています。複数の立方体を正しく表示するのに苦労しています。
私は一連の優れたチュートリアルを求めてネットをくまなく探しましたが、その方法については説明されています。 3D
プリミティブ、私が見つけられないのは、大量の処理を実行する方法に関する情報です。 3D
プリミティブ - cubes
, spheres
, pyramids
, 、など。
正しい解決策はありません
他のヒント
立方体を 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();
}
}
}
これが、これを行う方法の基本的な概要です。もっと効率的なものが必要な場合は、基本を理解した後で表示リストを検討してください:)
同じコードを使用して glTranslatef (または DirectX と同等のもの) を使用して立方体を描画しますが、描画する場所の相対点を移動します。もしかしたらもっと良い方法があるかもしれませんが、私は OpenGL についてはかなり初心者です。すべてが見えるように視点を設定してください。
そうですね、効率的にやっていれば、すべてを同じ頂点バッファーに投げ込むことになりますが、100 個の立方体を描画しても、過去 5 年間に生産された GPU を使用することはないと思います。そのため、上記の提案に従えば問題ないはずです。
頂点シェーダーを介した基本的なパスを作成し、ピクセル シェーダーで必要に応じてシェーディングします。ワールド マトリックスを渡して頂点シェーダーで変換を行うか、CPU 側でワールド空間の頂点位置を計算するだけです (キューブが固定されたままになる場合はこれを実行します)。
派手になってやってもいいでしょう ジオメトリのインスタンス化 などですが、まずは基本を理解してください。