Visualizzazione di 100 cubi mobili utilizzando DirectX O OpenGL
-
08-06-2019 - |
Domanda
Mi piacerebbe visualizzare 100 cubi fluttuanti utilizzando DirectX
O OpenGL
.
Sto cercando del codice sorgente di esempio o una descrizione della tecnica.Ho difficoltà a visualizzare correttamente più cubi.
Ho setacciato la rete per una buona serie di tutorial e anche se parlano di come fare 3D
primitive, quello che non riesco a trovare sono informazioni su come eseguire un gran numero di 3D
primitivi - cubes
, spheres
, pyramids
, e così via.
Nessuna soluzione corretta
Altri suggerimenti
Dici di avere già abbastanza problemi a far visualizzare un cubo...quindi non sono sicuro se ne hai uno da mostrare o meno.
Fondamentalmente...inserisci il tuo codice per scrivere un cubo in una funzione, quindi chiama semplicemente quella funzione 100 volte.
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();
}
}
}
Questo è lo schema di base su come potresti procedere.Se vuoi qualcosa di più efficiente, dai un'occhiata agli elenchi di visualizzazione una volta che hai capito le nozioni di base :)
Basta usare glTranslatef (o l'equivalente DirectX) per disegnare un cubo utilizzando lo stesso codice, ma spostando il punto relativo in cui lo disegnate.Forse c'è un modo migliore per farlo, sono abbastanza nuovo in OpenGL.Assicurati di impostare il tuo punto di vista in modo da poterli vedere tutti.
Sì, se fossi efficiente inseriresti tutto nello stesso buffer di vertici, ma non penso che disegnare 100 cubi spingerà qualsiasi GPU prodotta negli ultimi 5 anni, quindi dovresti stare bene seguendo i suggerimenti sopra.
Scrivi un passaggio di base attraverso il vertex shader, ombreggia come desideri nel pixel shader.Passa in una matrice mondiale ed esegui la traduzione nel vertex shader, oppure calcola semplicemente le posizioni dei vertici dello spazio mondiale sul lato CPU (fallo se i tuoi cubi rimarranno fissi).
Potresti essere fantasioso e farlo istanziazione della geometria ecc., ma prima iniziamo con le nozioni di base.