Question

J'ai besoin d'accélérer certains programmes qui utilisent des calculs intensifs où des calculs de surface à partir de l'intersection entre cubes, sphères et autres sont nécessaires.En utilisant CUDA, je dois bien sûr spécifier toutes les formalités dont j'ai besoin pour calculer analytiquement les informations relatives aux intersections.Mais comme je n'ai besoin que d'une bonne approximation de la surface résultante, j'ai lu sur OpenGL peut calculer ou estimer de telles surfaces.Je me demande si vous pouvez me donner votre avis ou m'indiquer des références pertinentes

Était-ce utile?

La solution

Si vous avez juste besoin de rendre ces objets, vous pouvez utiliser le tampon de gabarit pour évaluer les opérations booléennes dont vous avez besoin: http://www.opengl.org/resources/code/samples/advanced/advanced97/notes/node11.html

Toutes les quantités qui pourraient être calculées à partir d'une perspective ou d'une projection orthographique de la surface d'intersection pourraient être déduites d'un tel rendu avec son tampon de profondeur. Si vous avez besoin d'extraire toute l'intersection, vous pouvez essayer d'utiliser le pelage en profondeur avec le CSG au pochoir pour extraire une représentation en couches de l'intersection complète, bien qu'elle puisse être très inexacte sur les parties de la surface qui sont parallèles à la direction de visualisation devra faire un peu de travail supplémentaire pour recoudre les calques ensemble: http://developer.download.nvidia.com /SDK/10/opengl/src/dual_depth_peeling/doc/DualDepthPeeling.pdf

EDIT: Cela fonctionnera pour des surfaces de forme libre arbitraires et est une technique assez standard. Mais il a ses limites, en ce que la précision que vous obtenez sera assez médiocre et vous devrez peut-être projeter sur plusieurs vues afin d'obtenir une couverture adéquate de votre objet. A titre d'exemple, voici une application de détection de collision: http: / /www.cs.ucl.ac.uk/staff/b.spanlang/ISBCICSOWH.pdf

Autres conseils

OpenGL est encore moins utile ici que CUDA ou OpenCL, car il est principalement destiné à dessiner des maillages triangulaires tesselés.Bien sûr, vous pouvez effectuer des calculs géométriques sophistiqués dans les différentes étapes de shader d'OpenGL moderne.Le problème est que le résultat de tous ces calculs est une image basée sur des pixels.Il existe un mécanisme de rétroaction pour récupérer les données de sommet traitées, mais cela ne vous donne qu'un maillage.

Les intersections de tout ce qui est planaire ou / et avec des sphères sont en fait assez faciles et peuvent être effectuées de manière analytique.Le vrai truc dur est l'intersection de surfaces courbes de forme libre (Bezìer ou NURBS).Ceux-ci n'ont généralement pas de solution fermée, donc ce que vous devez faire est d'approximer numériquement une courbe d'ajustement qui correspond le mieux à l'intersection.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top