Работа с трехмерной моделью для приложения дополненной реальности на рабочем столе - PullRequest
2 голосов
/ 14 октября 2011

Я работаю над проектом дополненной реальности, который использует несколько маркеров, чтобы получить позиции для 3D-моделей, которые я планирую наложить. (Я делаю это с нуля, используя OpenCV, и я не использую ARToolkit или любые другие готовые библиотеки обнаружения маркеров).

Среда: Visual C ++ 2008, Windows 7, Core2Duo, 1 ГБ оперативной памяти, OpenCV 2.3

Я хочу, чтобы пользователь манипулировал трехмерными моделями, чтобы это стало своего рода симуляцией.

Для этого я планирую использовать OpenGL. Каковы ваши предложения, рекомендации? Можно ли выполнить симуляцию, используя сам OpenGL, или мне нужно будет использовать что-то вроде OpenSceneGraph / ODE / Unity 3D / Ogre 3D?

Это для академического проекта, так что лучше, если я смогу создать более самокодированную систему, а не использовать готовые продукты.

1 Ответ

2 голосов
/ 10 января 2012

может показаться, что OpenGL достаточно для ваших нужд (рисование модели определенного цвета и размера).

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

Для вашего проекта вам понадобится текстура, в которую вы бы скопировали изображение с камеры, используя glTexSubImage2D (), которую вы, в свою очередь, рисовали бы на фоне (или вы можете использовать glDrawPixels (), если вам не требуется масштабирование) , После этого вам необходимо иметь свою модель в комплекте с нормалями освещения. Модели могут быть, например. экспортируется из Blender или 3DS Max в формат ascii, который довольно легко разобрать. Тогда вы можете нарисовать модель. Цвета могут быть изменены с помощью glColor3f () перед рисованием модели (убедитесь, что вы не указали другой цвет при рисовании модели). Позиционирование моделей осуществляется с использованием матриц. В старом OpenGL есть несколько удобных и простых в использовании функций для поворота и перемещения объектов. Есть также функции для масштабирования объектов (изменения размера), так что это довольно просто. Все, что вам нужно, это выяснить положение камеры относительно маркера (который, я считаю, реализован в OpenCV).

Если бы вы использовали OpenGL с прямой совместимостью, вам нужно было бы настроить объекты буфера вершин, содержащие данные модели, и написать вершинные и фрагментные шейдеры для затенения и отображения вашей модели. Это своего рода дополнительная работа, за которую вы получаете расширенную гибкость. Но вы также можете использовать шейдеры в старом OpenGL, если решите, что они вам нужны (например, для некоторых спецэффектов).

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

...