2009-12-01 2 views
12

Я делаю рендеринг с использованием OpenGL. У меня есть текстурированные модели в Blender/Sketchup (я могу легко обмениваться между ними), и я хотел бы иметь возможность экспортировать эти файлы в мой рендерер. Моя первоначальная идея состояла в том, чтобы просто экспортировать необработанные лица и отображать эти треугольники, но я хотел бы легко нарезать файлы текстур в координаты текстуры.Использование моделей Blender/SketchUp в OpenGL

Под этим я имею в виду, что мои лица модели вырезаны в треугольники. Вы можете видеть в this image (воспроизведено ниже), что моя кривая становится 24 треугольниками. Я хотел бы знать, какие текстурные координаты использовать для каждого треугольника.

Polygonized curved 3D object

Будет ли DAE файл будет самый простой способ сделать это? Я читал спецификации для формата, и это выглядит достаточно легко. Я думаю, что смогу проанализировать XML и точно воссоздать модели в OpenGL. Мне интересно, есть ли более простой способ (т. Е. Тот, который не изобретает велосипед).

+0

Вы можете уточнить, что вы имеете в виду «Я бы хотел легко нарезать файлы текстур в координатах текстуры» –

+0

Уверенная вещь! Отредактировано мое оригинальное сообщение. – mkenyon

+2

Вопросы с правилом изображения, поэтому я позволил вам добавить ваши. – unwind

ответ

12

Если вам удобно разбирать формат .dae, обязательно используйте его. Однако, если вы заинтересованы в экспорте текстурированных треугольных сеток, я бы подумал об использовании .obj format, который намного проще разбирать. Из того, что я могу сказать, Sketchup и Blender могут экспортировать этот формат.

+0

Это выглядит как простой способ представления одних и тех же данных. Я рассмотрю формат OBJ сегодня вечером. – mkenyon

+1

Я хочу, чтобы вы знали, что OBJ (и соответствующие файлы MTL) отлично работает. Спасибо огромное! – mkenyon

+0

Добро пожаловать! –

1

Любой достойный формат файла, используемый программами моделирования (например, Blender или Sketchup), будет содержать всю информацию, необходимую для воссоздания геометрии, которую вы видите. Это должно включать в себя тип геометрии (например, треугольные полосы, отдельные треугольники и т. Д.), Вершины и нормали для геометрии, используемые свойства материала, а также текстуры, используемые вместе с соответствующими координатами текстуры. Если чего-то не хватает из потенциального формата файла, выберите другой.

Если вы считаете, что синтаксический анализ XML прост, то, надеюсь, вы планируете использовать существующие библиотеки для этого, такие как expat, Xerces или какая-либо другая языковая реализация.

При рассмотрении импорта/экспорта сначала попробуйте найти библиотеку с открытым исходным кодом, которая может обрабатывать импорт для вас и сделать данные доступными для вашей программы в разумном формате. Если это не доступно, и вы должны написать собственный импортер, попробуйте найти простой ASCII (, а не на основе) или бинарный формат, соответствующий вашим потребностям. PLY может быть подходящим. Только в качестве последнего средства я бы рекомендовал попробовать внедрить импортер для формата на основе XML.

+0

Я раньше работал над веб-приложениями; Я знаю достаточно, чтобы не выполнять собственный анализ XML. Это будет через библиотеку. – mkenyon

2

Если вы хотите разобрать .dae файлов, я бы предложил посмотреть в Collada парсерах. .dae на самом деле является расширением для файлов Collada, последнее усилие от Khronos group (сторонников OpenGL), чтобы иметь единый формат файлов для обмена 3D-данными.

Что касается существующих парсеров, вот что я пришел через:

  • collada-dom, эталонной реализации. Как следует из названия, это просто абстракция дерева XML.
  • FCollada, более красивая абстракция. Однако этот проект был мертв почти два года, и, из того, что я собрал, маловероятно, что мы увидим какое-либо обновление в будущем.
  • OpenCollada, последнее новое усилие. Не пробовал, но за этим стоит активное сообщество.

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

+0

Я хочу, чтобы вы знали, что файлы OBJ работают красиво. Спасибо огромное! – mkenyon

0

Вы должны смотреть на:

http://sketchup.google.com/community/developers.html

SketchUp команда обеспечивает C++ COM-сервер бесплатно. Используя это, вы можете получить доступ к большому количеству информации о файле .skp.

Вы должны иметь возможность использовать этот COM-сервер для записи импортера .skp для вашего приложения.

Вы должны попытаться получить файл .tlb, если сможете. Это даст вам доступ к интеллектуальным указателям, что упростит ваш импортер (COM-клиент)

Я использовал SDK версии 6 (включая файл tlb). Текущая версия SDK не включает этот файл.

Кто-то отправил решение (для отсутствующего файла TLB) на форуме разработчиков: http://groups.google.com/group/su-sdk-fileshare/topics

5

Если двоичные форматы не испугать вас, я предлагаю писать в Blender & Sketchup плагин и экспортирования геометрию предварительно испекли в упакованные массивы вершин.

Замечательная вещь об этом методе заключается в том, что в вашем приложении нет синтаксического анализа или преобразования типов. Все готово для отправки на GPU в простых смежных копиях памяти. Отлично подходит для статической геометрии.

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


#!BPY 
import bpy, struct 
from Blender import * 

self.fh = open("MyFileName", "w") 
m = bpy.data.meshes["MyMeshName"] 
faces = m.faces 
for face in faces: 
    for (vertex, uv) in zip(face.verts, face.uv): 
     self.fh.write(struct.pack('<fff', *vertex.co)) # coords 
     self.fh.write(struct.pack('<fff', *vertex.no)) # normals 
     self.fh.write(struct.pack('<ff', uv.x, uv.y)) # uvs 

self.fh.close() 
1

Там также: Lib3DS - http://www.lib3ds.org/ LibOBJ (не позволит мне размещать ссылку)

+0

Это интересно! Я проверю это. – mkenyon

+0

@mkenyon Существует также, вероятно, множество библиотек с открытым исходным кодом по всему Github. – FracturedRetina

 Смежные вопросы

  • Нет связанных вопросов^_^