Как создать файл 3D-модели из геометрических фигур?

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

Кто-нибудь может

(1) опишите шаг за шагом, как создать простой файл ИЛИ (2) укажите мне на учебник, который описывает, как это сделать

Примечания: * Использование программы с графическим интерфейсом для рисования таких файлов не подходит для меня * У меня нет опыта работы с 3D-моделированием * Другие форматы, такие как WRL или DAE, также подойдут для меня

РЕДАКТИРОВАТЬ:

Мне не нужно использовать текстуры, только комбинации простых геометрических фигур, расположенных в трехмерном пространстве.


person ChaseMedallion    schedule 25.05.2014    source источник


Ответы (1)


Я настоятельно рекомендую использовать какой-нибудь формат обмена ASCII, их много. Я обычно использую следующие:

  1. *.x объект DirectX (это исходный код C++)

    это проще всего реализовать!!! Но не так много инструментов, которые могут справиться с ними. Если вы не хотите тратить слишком много времени на кодирование, то это правильный выбор. Просто скопируйте шаблоны (в начале) из любого *.x файла, чтобы начать.

    здесь некоторые характеристики

  2. *.iges распространено и импортируется на большинство платформ CAD/CAM (включая Catia)

    это немного сложно, но для целей экспорта это не так уж плохо. Он поддерживает операции Volume, такие как +,-,&,^, которые ОЧЕНЬ СЛОЖНО реализовать правильно, но вам не обязательно их использовать :)

  3. *.dxf Формат обмена AutoCAD

    это еще сложнее, чем IGES. не рекомендую его использовать

  4. *.ac AC3D

    Я впервые увидел его в летном снаряжении.

    здесь некоторые характеристики

    на первый взгляд это довольно просто, но реализация подобъекта действительно сложна. Если вы не используете его, вы должны быть в порядке.

Этот подход легко проверить в блокноте или загрузив в какую-нибудь программу просмотра 3D моделей. Выберите тот, который больше всего подходит для ваших нужд, и кодируйте save/load функцию для внутренней модели ваших приложений class/struct. Таким образом, вы будете совместимы с другим программным обеспечением и устраните проблемы несовместимости, характерные для создания «почти известных» двоичных форматов, таких как 3ds,...

В вашем случае я бы использовал IGES (начальная спецификация обмена графикой)

Для экспорта вам не нужно реализовывать все несколько основных форм, так что это не будет слишком сложно. Я кодирую импортеры, которые намного сложнее. Мой класс загрузчика IGES составляет около 30KB исходного кода C++, выглядящего здесь для получения дополнительной информации

Вы не предоставили никакой информации о структуре и возможностях вашей 3D модели сетки.

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

В любом случае экспорт часто выглядит так:

  1. создать заголовок и структуру целевого формата файла
  2. если формат имеет какую-либо структуру каталогов, заполните ее и напишите (IGES)

    для подобъектов не забудьте добавить матрицы трансформации...

  3. напишите нужные фрагменты (список точек, список граней, нормали,...)

В форматах ASCII вы можете сделать это внутри переменной String, чтобы вы могли легко вставлять или изменять ее. Делайте все в памяти и записывайте все это в файл в конце, что быстро, а также добавляете возможность работать с памятью, а не с файлами. Это удобно, если вы хотите упаковать много файлов в один файл пакета, например *.pak, или отправить/получить файлы через IPC или LAN...

[Edit1] подробнее о IGES

спецификации формата файла

Я узнал IGES из этого pdf... Понятия не имею, откуда я это взял, но это была первая действующая ссылка, которую я сегодня нашел в Google. Я уверен, что там тоже есть какая-то ссылка без регистрации. Это около 13,7 МБ и оригинальное имя IGES5-3_forDownload.pdf.

программа просмотра win32

это бесплатная программа просмотра IGES. Мне не нравится интерфейс и обработка, но это работает. Необходимо иметь функциональный просмотрщик для тестирования своего...

примеры

здесь много учебных файлов для многих сущностей, есть 3 подссылки (igs,peek,gif), где вы можете увидеть пример файла другими способами для лучшего понимания.

экспорт в IGES

вы не предоставили никакой информации о внутренней структуре вашей 3D сетки, поэтому я не могу помочь с экспортом. Существует множество способов экспорта, поэтому выберите тот, который наиболее близок к вашему представлению сетки App 3D. Например, вы можете использовать:

  • облако точек
  • поверхности вращения
  • прямоугольные (QUAD) поверхности
  • представление линий границ (не сплошные)
  • отделка поверхности и многое другое...
person Spektre    schedule 30.05.2014
comment
Существуют ли бесплатные/простые инструменты для перевода из этих форматов ASCII в один из форматов, которые я упомянул? - person ChaseMedallion; 30.05.2014
comment
@ChaseMedallion Я их не использую, поэтому не знаю, но большинство конвертеров 3D-сетки могут импортировать IGES и DXF и экспортировать их в распространенные форматы файлов, такие как 3ds, ... Я думаю, что есть некоторые бесплатные инструменты моделирования AC3D, которые могли бы это сделать также. Если вы привязаны к определенному формату файла, реализуйте его напрямую (конечно, существует риск несовместимости, о котором я упоминал ранее) - person Spektre; 30.05.2014
comment
У меня есть соблазн пойти с IGES, как вы рекомендуете. Не могли бы вы обновить свой пост примером файла IGES, который рисует 2 цилиндра, расположенных в трехмерном пространстве (с комментариями/объяснениями)? Предоставленная ссылка на Википедию описывает только то, как рисовать 2D-фигуры, и не очень полезна для новичка. В качестве альтернативы, ссылка на учебник была бы полезной. - person ChaseMedallion; 01.06.2014
comment
@ChaseMedallion добавил [edit1] , да, Вики в основном дерьмо для очень специфических областей и может использоваться только для всемирно известных знаний. Загрузите этот iges5-3 pdf, если вы не можете прокомментировать меня, и я опубликую его где-нибудь - person Spektre; 02.06.2014