Рекомендуемый тип 3D-модели для игровой модели персонажа, загруженный вручную? - PullRequest
7 голосов
/ 25 февраля 2009

Я пишу игру на JOGL и должен представлять игрового персонажа. Я планирую использовать скелетную анимацию для движений персонажа, и, конечно, персонаж будет очищен от кожи. Кажется, я не могу найти хороших загрузчиков моделей для JOGL, поэтому я планирую загрузить тип файла самостоятельно, основываясь на спецификациях или чем-то еще. Я также планирую использовать Blender в качестве своего 3D-моделиста, так что лучше использовать какой-нибудь существующий там тип.

Какой тип файла вы рекомендуете использовать? .blend? .x, .3ds, .md2 / 3/5, ... ?? Помните, что мне нужно что-то с четко определенным форматом, чтобы я мог писать загрузчику, не отключая какой-либо случайный формат файла, и он должен поддерживать вышеупомянутые функции. Любая другая информация, которую вы можете дать относительно того, почему вы ее выбрали и почему она лучше всего, будет очень полезной!

Спасибо!

EDIT: Я буду писать экспортер Blender MS3D. Когда я закончу, я опубликую это здесь .

Между тем, смотрите мой отмеченный ответ ниже; но больше продолжалось с тех пор. Я не собираюсь держать это в курсе того, что я делаю, но в основном я нашел jMonkey Engine, и у него уже есть импортер ms3d и другие подсистемы, которые я начал писать вручную. Несмотря на материал сценограммы (именно поэтому я избегал Java3D), я думаю, что лучше всего будет объединить усилия с ним, так что это то, что я собираюсь сделать.

Ответы [ 5 ]

3 голосов
/ 25 февраля 2009

Если вы можете жить только с геометрией или готовы обрабатывать собственное текстурирование, то .obj, вероятно, является наиболее простым и широко поддерживаемым форматом 3D-файлов. Это в основном ascii 3D-моделирования.

В противном случае я бы склонялся к vrml. Он хорошо определен, и есть хоть какой-то код, чтобы начать работу. Я успешно загрузил vrml модели в java3D, используя свободно доступный код. Собственный размер файла имеет тенденцию быть большим, но это может быть решено, используя сжатый формат.

Я бы не рекомендовал .3ds. Единственный раз, когда я обращался с читателем для этого формата, был в Delphi Pascal, он беспорядочный, плохо определен, сложен в обработке и имеет тенденцию иметь много «вариаций», таких, что, хотя мне удалось экспортировать модели обработки моего читателя из Сам по себе 3D-MAX просто отлично, он отклонил многие модели из других пакетов, которые утверждали, что были в формате 3DS, но не были сформированы должным образом.

ДОБАВЛЕНО: Также я рекомендую вам взглянуть на API Java3D и книгу О'Рейли Программирование Killer Game на Java , даже если вы не идете по маршруту Java3D, это вероятно ответить на многие ваши вопросы.

2 голосов
/ 11 марта 2009

Прежде всего, спасибо двум другим ответчикам. Также basszero, ты был прав насчет файла смешивания, и я должен был сначала проверить Википедию! Это почти бесполезный двоичный дамп памяти Blender.

Вскоре после написания этого вопроса я решил пойти дальше и написать загрузчик OBJ, потому что 1) это дало бы мне опыт загрузки формата файла 3D и 2) это казалось хорошим, широко используемым форматом, но также и простым загрузить. Это оказалось хорошим решением, потому что заставило меня осознать, что я на самом деле не знал разницу между объектом и группой, и я также мало знал о материалах. Это помогло мне установить код для этих трехмерных структур.

В обоих ответах рекомендуются форматы на основе XML. Я не хочу формат XML. Я не верю, что это правильное место для XML. Я считаю, что эти форматы были созданы, потому что XML является гибким, универсальным и простым для создания схем, но это не то, что я ищу. Мне нужен формат, который можно быстро загружать (XML не является, условно говоря), он не должен быть гибким или удобочитаемым, и что-то, для чего я могу написать импортер, а не полагаться на библиотеки XML. Бассеро даже сказал: «ценой быть XML», и он совершенно прав; это цена, которую я не чувствую, стоит бремени.

Мой загрузчик OBJ готов. Я отделил его от реальных классов модели и реализовал его с помощью интерфейса MeshFactory, чтобы в будущем я мог написать другой загрузчик, если бы захотел ... Каков план. В последние пару дней я проводил дополнительные исследования и определился с форматом ms3d.

Формат ms3d поддерживает скелетную оснастку (соединения) и скелетную анимацию ключевого кадра, а также текстурную карту и альфа-карту. Кроме того, это легко читаемый компьютером двоичный формат, который не тратит впустую пространство (как XML и OBJ) с читаемыми человеком тегами и метками и тому подобным.

К сожалению, в Blender нет (работающего) сценария экспорта ms3d, поэтому я сам напишу сценарий для него. К счастью, это не сложный процесс, и вы можете прочитать документацию Blender и использовать других экспортеров в качестве примеров. Мне придется освежить свой Python, но в остальном он кажется очень простым из того, что я видел в других скриптах.

Со стороны Java все должно быть просто, на самом деле это будет даже проще, чем в формате OBJ, потому что ms3d более структурирован. Я нашел спецификации для формата ms3d онлайн, в стиле C (гений!), Поэтому они невероятно говорят сами за себя, и у меня больше нет вопросов о формате. Я буду основывать свою реализацию на этой спецификации, хотя позже я могу реализовать свои собственные варианты; это здорово, когда я пишу свой собственный импортер и экспортер, я могу изменить формат так, как считаю нужным.

В общем, я решил, что это лучшее решение.

И basszero, вы абсолютно правы, как я видел из моего загрузчика OBJ: «Как только вы все прочитали, организация данных (список отображения, текстуры, массив вершин, буфер вершин и т. Д.) рендеринг совершенно другого зверя. "

Cruachan: для меня нет Java3D, я придерживаюсь JOGL. Я действительно владею этой книгой (хотя она сейчас недоступна), хотя я не помню, как он загружал модели, но я уверен, что он использовал загрузчики формата Java3D, которые делают это автоматически. Не то, что я планирую использовать ... Извините!

-Ricket

1 голос
/ 25 февраля 2009

Я полагаю, что .blend - это в основном двоичный дамп структур памяти из blender, который мало чем поможет за пределами blender. Используйте Blender для моделирования, но экспортируйте в другой формат.

Это может быть немного многословно, но я слышал, что Collada очень хорошо оборачивает 3D-информацию (ценой XML). Положительным моментом является то, что, скорее всего, существует правильное определение схемы, которое вы можете передать через JAXB, что приведет к полному анализатору без вашей работы.

Форматы .md * также могут быть хорошей альтернативой. Они из движков iD (q1, q2, q3, q4, doom3), и они задокументированы. Они также содержат анимационные последовательности.

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

0 голосов
/ 24 декабря 2009

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

Смотрите некоторые примеры использования Ogre и Irrlicht здесь: http://gamekit.googlecode.com

0 голосов
/ 18 марта 2009

Вау, чувак, ты собираешься выпустить экспортер ms3d, когда закончишь? И если так, как это происходит? Мне действительно нужно заполучить экспортера, который работает для анимации и использует Fragmotion, и похоже, что твоя работа - моя последняя надежда.

...