рендеринг 3D сцены в облако точек - PullRequest
1 голос
/ 16 ноября 2011

Есть ли способ извлечь облако точек из визуализированной 3D-сцены (используя OPENGL)?

в деталях:

На входе должна быть визуализированная 3D-сцена.

Выходными данными должен быть, например, трехмерный массив с вершинами (x, y, z).

Миссия возможна или невозможна?

Ответы [ 3 ]

2 голосов
/ 12 апреля 2012
  • Визуализируйте вашу сцену, используя орфографический вид, чтобы все сразу помещалось на экране.
  • Используйте g-буфер (ищите этот термин или «жирный пиксель» или «отложенный рендеринг») для захвата (X, Y, Z, R, G, B, A) в каждой точке выборки в кадровом буфере.
  • Прочтите ваш кадровый буфер и поместите кортеж (X, Y, Z, R, G, B, A) в каждую точку выборки в линейный массив.

Теперь у вас есть облако точек, отобранное из вашей обычной геометрии с использованием OpenGL. Помимо чтения с графического процессора на хост, это будет очень быстро.

Пойдем дальше с этим:

  • Использование глубинного пилинга (поиск по этому термину) для создания образцов на поверхностях, которые не являются ближайший к камере.
  • Повторить рендеринг с нескольких точек обзора (или эквивалентно для нескольких поворотов). сцены), чтобы быть уверенным в захвате фрагментов из укромных уголков Сцена и добавить точки, полученные от каждого прохода в один большой линейный массив.
1 голос
/ 17 ноября 2011

Я думаю, что вы должны взять свои входные данные и вручную умножить их на матрицы преобразования и просмотра модели.Для этого не нужно использовать OpenGL, просто математика векторов / матриц.

1 голос
/ 16 ноября 2011

Если я правильно понимаю, вы хотите деконструировать окончательный рендеринг (2D) 3D-сцены. Как правило, в OpenGL нет встроенной возможности, которая делает это.

Однако существует много работ, описывающих подходы к анализу 2D-изображения для генерации 3D-представления. Это, например, то, что Microsoft Kinect делает в некоторой степени. Посмотрите на документы, представленные в предыдущих изданиях SIGGRAPH, для начала. Многие реализации, вероятно, используют графический процессор (OpenGL, DirectX, CUDA и т. Д.), Чтобы творить чудеса, но это все. Например, фильтры обнаружения краев для определения видимых краев объектов и функции гистограммы могут работать на графическом процессоре.

В зависимости от предметной области вашего приложения может быть что-то почти невозможное или может быть ярлык, который вы можете использовать для идентификации форм и вершин.

редактировать

Я думаю, у вас может быть неправильное понимание того, как работает рендеринг OpenGL. Приложение создает и отправляет в OpenGL вершины треугольников, образующих многоугольники и 3d-объекты. Затем OpenGL растеризует (то есть преобразует в пиксели) эти объекты, чтобы сформировать двухмерную визуализацию трехмерной сцены с определенной точки зрения с определенным полем зрения. Когда вы говорите, что хотите получить «облако точек» вершин, трудно понять, чего вы хотите, поскольку вы в первую очередь отвечаете за создание этих вершин!

...