DirectX
またはを使用して 100 個のフローティング キューブを表示したいと考えていますOpenGL
。
サンプルソースコードか、テクニックの説明を探しています。複数の立方体を正しく表示するのに問題があります。
私は一連の優れたチュートリアルを求めてネットをくまなく調べました。それらはプリミティブの実行方法について説明してい3D
ますが、多数の3D
プリミティブ ( cubes
、spheres
、pyramids
、など) の実行方法に関する情報は見つかりません。
DirectX
またはを使用して 100 個のフローティング キューブを表示したいと考えています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側でワールドスペースの頂点位置を計算します(キューブが固定されたままになる場合はこれを行います)。
ファンシーになってジオメトリインスタンス化などを行うこともできますが、最初に基本を理解するだけです。