Какие геометрические расчеты можно ускорить с помощью OpenGL - PullRequest
3 голосов
/ 15 июня 2011

Мне нужно ускорить некоторые программы, которые используют интенсивные вычисления, где требуются вычисления поверхности от пересечения между кубами, сферами и тому подобным.Используя CUDA, мне нужно указать всю формулу, которая мне нужна, конечно, чтобы аналитически рассчитать информацию, связанную с пересечениями.Но так как мне нужно только хорошее приближение полученной поверхности, я читал о том, что OpenGL может рассчитывать или оценивать такие поверхности.Интересно, не могли бы вы высказать мне свое мнение или указать на соответствующие ссылки

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Если вам просто нужно визуализировать эти объекты, вы можете использовать буфер трафарета для оценки любых логических операций, которые вам нужны: http://www.opengl.org/resources/code/samples/advanced/advanced97/notes/node11.html

Любые величины, которые могут быть вычислены из перспективной или ортографической проекции поверхности пересечения, могут быть выведены из такого рендеринга вместе с его буфером глубины. Если вам нужно извлечь все пересечение, вы можете попробовать использовать глубинный пилинг вместе с трафаретной CSG, чтобы извлечь многослойное представление полного пересечения, хотя оно может быть очень неточным на участках поверхности, параллельных направлению обзора, и вы нужно будет проделать дополнительную работу, чтобы соединить слои вместе: http://developer.download.nvidia.com/SDK/10/opengl/src/dual_depth_peeling/doc/DualDepthPeeling.pdf

РЕДАКТИРОВАТЬ: Это будет работать для произвольных поверхностей свободной формы и является довольно стандартной техникой. Но у него есть свои ограничения: точность, которую вы получаете, будет довольно низкой, и вам, возможно, придется проецировать на несколько видов, чтобы получить адекватное покрытие вашего объекта. В качестве примера, вот приложение для обнаружения столкновений: http://www.cs.ucl.ac.uk/staff/b.spanlang/ISBCICSOWH.pdf

1 голос
/ 16 июня 2011

OpenGL здесь еще менее полезен, чем CUDA или OpenCL, поскольку он в первую очередь предназначен для рисования треугольных мозаичных сеток. Конечно, вы можете выполнять сложные геометрические вычисления на различных этапах шейдеров современного OpenGL. Проблема в том, что результатом всех этих вычислений является пиксельная картинка. Существует механизм обратной связи для извлечения обработанных данных вершин, но он дает только меш.

Пересечение чего-либо плоского или / и со сферами на самом деле довольно легко и может быть сделано аналитически. Реальные трудные вещи - это пересечение произвольно изогнутых поверхностей (Безье или NURBS). У них обычно нет закрытого решения, поэтому вам нужно численно аппроксимировать кривую усечения, которая наилучшим образом соответствует пересечению.

...