Domanda

Ho bisogno di accelerare alcuni programmi che utilizzano calcoli intensivi in ​​cui sono necessari calcoli di superfici dall'intersezione tra cubi, sfere e simili.Usando CUDA ho bisogno di specificare tutto il formuale che mi serve, ovviamente, per poter calcolare analiticamente le informazioni relative alle intersezioni.Ma poiché ho solo bisogno di una buona approssimazione della superficie risultante, ho letto che OpenGL può calcolare o stimare tali superfici.Mi chiedo se potresti darmi la tua opinione o indicarmi riferimenti rilevanti

È stato utile?

Soluzione

Se hai solo bisogno di eseguire il rendering di quegli oggetti, puoi utilizzare lo stencil buffer per valutare qualsiasi operazione booleana di cui hai bisogno: http://www.opengl.org/resources/code/samples/advanced/advanced97/notes/node11.html

Qualsiasi quantità che potrebbe essere calcolata da una prospettiva o da una proiezione ortografica della superficie di intersezione potrebbe essere dedotta da tale rendering insieme al suo buffer di profondità.Se è necessario estrarre l'intera intersezione, è possibile provare a utilizzare il peeling della profondità insieme al CSG con stencil per estrarre una rappresentazione a strati dell'intersezione completa, sebbene possa essere molto impreciso sulle parti della superficie parallele alla direzione di visualizzazione e su sarà necessario fare del lavoro extra per ricucire insieme gli strati:http://developer.download.nvidia.com/SDK/10/opengl/src/dual_ Depth_peeling/doc/DualDepthPeeling.pdf

MODIFICARE:Funzionerà per superfici arbitrarie e di forma libera ed è una tecnica abbastanza standard.Ma ha i suoi limiti, nel senso che la precisione che otterrai sarà piuttosto scarsa e potresti dover proiettare su più viste per ottenere una copertura adeguata del tuo oggetto.Ad esempio, ecco un'applicazione per il rilevamento delle collisioni: http://www.cs.ucl.ac.uk/staff/b.spanlang/ISBCICSOWH.pdf

Altri suggerimenti

OpenGL è ancora meno utile in questo caso rispetto a CUDA o OpenCL, poiché è principalmente mirato a disegnare mesh tassellate triangolari.Naturalmente puoi eseguire calcoli geometrici sofisticati nei vari stadi shader del moderno OpenGL.Il problema è che il risultato di tutti questi calcoli è un'immagine basata sui pixel.Esiste un meccanismo di feedback per recuperare i dati dei vertici elaborati, ma questo fornisce solo una mesh.

Le intersezioni di qualsiasi cosa planare e/o con sfere sono in realtà abbastanza semplici e possono essere eseguite analiticamente.La vera difficoltà è l'intersezione di superfici curve a forma libera (Bezìer o NURBS).Questi di solito non hanno una soluzione chiusa, quindi quello che devi fare è approssimare numericamente una curva di taglio che si adatta meglio all'intersezione.

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