2008-08-04 11 views
12

DirectXまたはOpenGLを使用して~100の浮動小数点を表示したいとします。DirectXまたはOpenGLを使用して100のフローティングキューブを表示する

私は、いくつかのサンプルソースコード、またはその技術の説明を探しています。私はこの種のことがあなたのためには簡単だと知っています。3Dの教祖はそこにいるのですが、正しく表示するには1つのキューブでさえも十分な手間があります。

私はチュートリアルの良いシリーズのためにネットをとかしてきたし、彼らは3Dプリミティブを行う方法について話しますが、私は見つけることができないことは3Dプリミティブを大量に行う方法についてです - cubesspherespyramidsは、など。

答えて

7

あなたは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(); 
     } 
    }    
} 

これは、これを行う方法についての基本的な概要です。より効率的なものをお望みなら、いつでもディスプレイリストを見てください。

6

glTranslatef(またはDirectX相当品)を使用して、同じコードを使用してキューブを描画しますが、描画する相対点を移動するだけです。たぶんもっと良い方法がありますが、私はOpenGLをかなり新しくしています。視点を設定して、すべて見ることができるようにしてください。

6

ええ、効率的であれば、すべてを同じ頂点バッファに入れてもいいと思います。 100キューブを描画すると、過去5年間に生産されたGPUがすべてプッシュされるため、上記の提案に従うことをお勧めします。

ピクセルシェーダーで基本的なパススルーシェーダー、シェードを書き込みます。世界の行列を渡して頂点シェーダで変換を行うか、CPUのワールド空間頂点の位置を計算します(キューブが固定されている場合はこれを行います)。

geometry instancingなどとおもしろくなるかもしれませんが、基本的なことをまず理解してください。

関連する問題