1) Dipende dall'implementazione di yoru. Avrai bisogno di avere una struttura dati in cui puoi cercare i valori in ogni angolo (vertice) del voxel o del cubo. Può trattarsi di un'immagine 3d (ad esempio una trama 3D in OpenGL) oppure può essere una struttura dati array personalizzata o qualsiasi altro formato desiderato.
2) È necessario controllare i vertici del cubo. Ci sono diverse ottimizzazioni su questo, ma in generale, inizia con il primo angolo e controlla solo i valori di tutti e 8 gli angoli del cubo.
3) La maggior parte degli algoritmi (veloci) crea una maschera di bit da utilizzare come tabella di ricerca in una matrice statica di opzioni. Ci sono solo tante opzioni possibili per questo.
4) Dopo aver creato i triangoli dal triTable, è possibile utilizzare OpenGL per renderli.
Diciamo che ho i dati di una nuvola di punti di una mela. come procedo?
Questo non funzionerà con i cubi in marcia. I cubi in marcia richiedono i dati voxel, quindi è necessario utilizzare alcuni algoritmi per inserire la nuvola di punti dei dati in un volume cubico. Splatting gaussiano è un'opzione qui.
Normalmente, se si sta lavorando da una nuvola di punti e si desidera vedere la superficie, è necessario esaminare gli algoritmi di ricostruzione della superficie anziché i cubi in marcia.
Se vuoi saperne di più, ti consiglio vivamente di leggere alcuni libri sulle tecniche di visualizzazione. Uno buono proviene dalla gente di Kitware - The Visualization Toolkit.
Si potrebbe voler dare un'occhiata a VTK. Ha un'implementazione C++ di Marching Cubes ed è completamente open source.
fonte
2009-04-23 17:04:51
può un 6 glQuads pari ad un voxel? in tal caso, in che modo la build di voxel viene ripristinata? il mio punto è il centro del cubo? – noob88
@ noob88: No, non proprio. Il tuo "cubo" dovrebbe essere un oggetto composto da 8 pionti. I 6 glQuad potrebbero essere i volti del cubo/voxel, e i vertici che stai usando potrebbero essere i tuoi 8 punti. Mi piacerebbe creare una struttura dati diversa per tenerlo, comunque. Qualcosa di semplice come un array multidimensionale funziona. –
vedo ... penso di aver bisogno di tempo per testarlo 1 °, posso avere il tuo contatto? dovrei avere ulteriori problemi spero di poter ottenere il tuo aiuto .. – noob88