Pregunta

Necesito acelerar algunos programas que usen cálculos intensivos donde se necesitan cálculos de superficie de la intersección entre cubos, esferas y similares. Usando CUDA, necesito especificar todo el formuale que necesito, por supuesto, para calcular analíticamente la información relacionada con las intersecciones. Pero dado que solo necesito una buena aproximación de la superficie resultante, leí sobre OpenGL puede calcular o estimar tales superficies. Me pregunto si podrías darme tu opinión o señalarme referencias relevantes.

¿Fue útil?

Solución

Si solo necesita representar esos objetos, puede usar el búfer de plantilla para evaluar las operaciones booleanas que necesite: http://www.opengl.org/resources/code/samples/advanced/advanced97/notes/node11.html

Cualquier cantidad que pueda calcularse desde una perspectiva u proyección ortográfica de la superficie de intersección podría deducirse de tal representación junto con su tampón de profundidad. Si necesita extraer toda la intersección, puede intentar usar la pelado de profundidad junto con CSG estampado para extraer una representación en capas de la intersección completa, aunque puede ser muy inexacta en las partes de la superficie que son paralelas a la dirección de visión y usted Tendrá que hacer un trabajo adicional para unir las capas:http://developer.download.nvidia.com/sdk/10/opengl/src/dual_depth_peeling/doc/dualdepthpeeling.pdf

Editar: esto funcionará para superficies arbitrarias de forma gratuita y es una técnica bastante estándar. Pero sí tiene sus limitaciones, ya que la precisión que obtenga será bastante pobre y es posible que tenga que proyectarse en múltiples vistas para obtener una cobertura adecuada de su objeto. Como ejemplo, aquí hay una aplicación para la detección de colisiones: http://www.cs.ucl.ac.uk/staff/b.spanlang/isbcsowh.pdf

Otros consejos

OpenGL es aún menos uso aquí que CUDA u OpenCl, ya que está dirigido principalmente a dibujar mallas triangulares de Tesseled. Por supuesto, puede hacer cálculos geométricos sofisticados en las diversas etapas de sombreador de OpenGL moderno. El problema es que el resultado de todos esos cálculos es una imagen basada en píxeles. Existe un mecanismo de retroalimentación para recuperar los datos de vértices procesados, pero eso solo le da una malla.

Las intersecciones de cualquier cosa plana o/y con esferas son realmente bastante fáciles y se pueden hacer analíticamente. Las cosas realmente difíciles es intersectar superficies curvas de forma libre (Bezìer o Nurbs). Esos generalmente no tienen una solución cerrada, por lo que lo que debe hacer es aproximinar numéricamente una curva de ajuste que mejor se adapte a la intersección.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top