2D векторное моделирование для разработки игр - PullRequest
10 голосов
/ 17 января 2010

Создание своего клона астероидов (в C) Я довольно полюбил векторные объекты, но я просто закодировал их как массивы x, y. Это было бы хорошо для чего-то вроде астероидов, но что мне делать, если я хочу делать более сложные 2D-модели?

Я отмечаю, что очень много программного обеспечения для 3D-моделирования , а также множество учебных пособий и справок по импорту 3D-моделей в свою программу C / C ++ для использования с Open GL.

Однако меня больше интересует создание двухмерных векторных моделей, нежели трехмерных, поскольку я очень рад, что еще какое-то время пытаюсь попробовать 2D-игры. Существует ли такая концепция, как 2D-моделирование? Существуют ли инструменты для создания и экспорта 2D-моделей и библиотек для конкретного импорта 2D-моделей, или можно просто создать плоские модели в 3D-программном обеспечении, а затем импортировать эти файлы (например, .3ds, .ms3d) и положить их плоскими на ось z?

Пока я думал только о том, чтобы использовать что-то вроде Inkscape для моделирования, генерировать файлы SVG, а затем использовать Cairo для их импорта и рендеринга. Будет ли это хорошо работать, или у вас есть другие рекомендации?

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

Ответы [ 3 ]

7 голосов
/ 17 января 2010

Не нужно выдвигать свой собственный ответ, но я провел немного больше исследований по использованию SVG. Поскольку я использую OpenGL, кажется, что OpenVG может быть хорошим совпадением.

  • AmanithVG - коммерческая реализация OpenVG, построенная на OpenGL, с программным и аппаратным рендерингом. Загрузка доступна только для ознакомления, и она прекрасно работает, хотя я не знаю, сколько она стоит.
  • ShivaVG - автор был раздражен тем, что AmanithVG был коммерческим, поэтому сделал свою собственную реализацию с открытым исходным кодом в чистом ANSI C. Хотя некоторое время не обновлялся. В SourceForge .
  • Антизерновая геометрия - не уверен насчет этого. Я думаю, что есть поддержка SVG, но я думаю только программный рендеринг.
  • librsvg - использует Cairo в качестве основного бэкэнда для рендеринга SVG. Выглядит хорошо.

Кажется, что все, кроме librsvg, не позволяют фактически загружать SVG-файлы, поэтому, вероятно, должен быть еще один шаг, когда SVG-файлы анализируются в соответствующие структуры OpenVG (которые в большинстве случаев кажутся большими массивами с плавающей точкой, поэтому не слишком). жесткий). Похоже, что есть многообещающее сопоставление элементов из SVG в OpenVG, что является многообещающим. Насколько я могу судить, OpenVG в значительной степени создан для SVG.

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

6 голосов
/ 17 января 2010

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

Все еще SVG и загрузка его через Cairo представляется жизнеспособным решением. Хотя я бы позаботился о том, чтобы у вас было включено аппаратное ускорение (предпочтительно бэкэнд OpenGL).

Что касается 2D-форматов, вы не получите такой хорошей поддержки, как для SVG, для любого формата, поэтому я буду придерживаться этого. Технически такие вещи, как Collada или X3D, поддерживают 2D-графику, но практически у них много бесполезного (для 2D-программиста) раздувания.

3 голосов
/ 17 января 2010

SVG - это путь для 2D:)

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

...