2008-08-04 20 views
12

Me gustaría mostrar ~ 100 cubos flotantes usando DirectX o OpenGL.Mostrar 100 cubos flotantes usando DirectX O OpenGL

Estoy buscando algún código fuente de muestra o una descripción de la técnica. Sé que este tipo de cosas es fácil para ustedes, gurús '3D' consumados, pero tengo suficientes problemas para que incluso un cubo se muestre correctamente.

he peinó la red para una buena serie de tutoriales y aunque se habla de cómo hacer 3D primitivas, lo que no puedo encontrar es información sobre cómo hacer un gran número de 3D primitivas - cubes, spheres, pyramids , Etcétera.

Respuesta

7

Dice que tiene suficientes problemas para mostrar un cubo ... así que no estoy seguro de si tiene uno para mostrar o no.

Básicamente ... escriba su código para escribir un cubo en una función, luego simplemente llame a esa función 100 veces.

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(); 
     } 
    }    
} 

Ese es el esquema básico de cómo se puede hacer esto. Si desea algo más eficiente, eche un vistazo a las listas de presentación en algún momento una vez que tenga los fundamentos resueltos :)

6

Simplemente use glTranslatef (o el equivalente de DirectX) para dibujar un cubo usando el mismo código, pero moviendo el punto relativo donde lo dibuja. Tal vez hay una mejor manera de hacerlo, soy bastante nuevo en OpenGL. Asegúrese de establecer su punto de vista para que pueda verlos todos.

6

Sí, si estuviera siendo eficiente, tiraría todo en el mismo búfer de vértices, pero no creo dibujar 100 cubos empujará cualquier GPU producida en los últimos 5 años, por lo que debería estar bien siguiendo las sugerencias anteriores.

Escriba un paso básico a través del sombreador de vértices, sombree como lo desee en el sombreador de píxeles. Pase en una matriz mundial y realice la traducción en el sombreado de vértices, o simplemente calcule las posiciones de los vértices del espacio mundial en el lado de la CPU (haga esto si sus cubos van a permanecer fijos).

Puede hacerse elegante y hacer geometry instancing etc., pero solo obtenga lo básico en primer lugar.