Domanda

Questa è una domanda piuttosto principiante, ma dato che rendo una forma complessa in OpenGL che richiede molti calcoli, c'è comunque per esportarlo in uno stato come un modello che può essere riaperto in seguito dato che non lo modifichi di nuovo?

Non riesco a crearli al di fuori del programma (con qualcosa come Blender) poiché la forma viene calcolata all'avvio del programma. Il rendering viene quindi tradotto, ruotato, disegnato, ecc. Nota, che non ho bisogno di modificare la forma, ma lo voglio in uno stato 3D, quindi salvare un'immagine non è un'opzione.

Sto usando Opentk 1.0, VB.NET (.NET 4)

È stato utile?

Soluzione

L'ovvia possibilità sarebbe quella di scrivere i tuoi vertici in un file e quindi ricaricarli quando necessario. A meno che tu non abbia motivi specifici per fare diversamente, è probabilmente meglio utilizzare uno dei tanti formati di file esistenti per questo, come OBJ Wavefront, Ogre3d mesh xml File, eccetera.

Altri suggerimenti

Sembra una situazione ideale per gli elenchi di visualizzazioni OpenGL. Il modo in cui li usi è prima chiedere a OpenGL un ID elenco di visualizzazione da utilizzare:

GLuint draw_id = glGenLists(1);

(Puoi chiedere diversi ID consecutivi alla volta, ma in questo caso ci chiediamo solo 1) Quindi, prima volta attraverso la routine di sorteggio, chiama GlNewlist:

glNewList(draw_id, GL_COMPILE);
<do compute intensive drawing here>
glEndList();

Si noti che questo non renderà effettivamente la tua forma (puoi usare GL_COMPILE_AND_EXECUTE in GLNEWLIST, che volere Rendi la tua forma, ma questo è generalmente scoraggiato)

Ora, ogni volta che devi disegnare il tuo oggetto:

< set up your OpenGL matrices >
glCallList(draw_id);

E infine, quando hai finito, puoi usare i gldelelisti.

Gli elenchi di visualizzazione possono effettivamente accelerare il rendering, poiché è possibile eseguire alcune ottimizzazioni e tutte le spese generali di chiamata di funzione vengono rimosse.

Ora, tecnicamente, gli elenchi di visualizzazioni OpenGL sono stati deprecati (non rimossi, comunque!) In OpenGL 3.0 e sopra (insieme a GlTranslate, Glvertex Glbegin ... Grrr), ma dovrebbero comunque funzionare per il prossimo futuro. Per essere una prova futura, dovresti usare array di vertice, ma è un po 'più complicato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top