Obj файл c как устроен

Обновлено: 07.07.2024

3D model format

OBJ — это формат файлов описания геометрии, разработанный в Wavefront Technologies для их анимационного пакета Advanced Visualizer. Формат файла является открытым и был принят другими разработчиками приложений 3D графики и может быть экспортирован/импортирован в e-Frontier's Poser, Maya, XSI, Blender, MeshLab, Misfit Model 3D, 3D Studio Max и Rhinoceros 3D, Hexagon, CATIA, Newtek Lightwave, Art of Illusion, Modo, Cinema 4D, Zanoza Modeller и т. д. По большей части это общепринятый формат.

Формат файлов OBJ — это простой формат данных, который содержит только 3D геометрию, а именно, позицию каждой вершины, связь координат текстуры с вершиной, нормаль для каждой вершины, а также параметры, которые создают полигоны.

Содержание

Формат файла

Obj файл содержит несколько типов определения:

Определение сторон

Поверхность определяется в списке вершин, текстурных координат и нормалей. Полигоны такие как квадрат могут быть определены с помощью более 3 вершин/текстурных координат/нормалей.

Вершины

Строка начинающаяся с f представляет собой индекс Поверхности. Каждая сторона может состоять из трех или более вершин.

Ссылки

Wikimedia Foundation . 2010 .

Полезное

Смотреть что такое "Obj" в других словарях:

OBJ — or OBJ may refer to: Object file, an organized machine code file created by a compiler with .obj file extension Relocatable Object Module Format, an Object file for Intel microprocessors with .obj file extension Wavefront .obj file, a 3D geometry … Wikipedia

Obj — Obj, Fluß, s. Ob … Meyers Großes Konversations-Lexikon

Obj — Obj, Strom, s. Ob … Kleines Konversations-Lexikon

obj — abbrev. 1. object 2. objection 3. objective * * * … Universalium

.obj — obj, Dateierweiterung für eine Objektcode Datei (Objektcode) … Universal-Lexikon

obj — abbrev. 1. object 2. objection 3. objective … English World dictionary

.OBJ — Objet 3D (format de fichier) OBJ est un format de fichier contenant la description d une géométrie 3D. Il a été défini par la société Wavefront Technologies dans le cadre du développement de son logiciel d animation Advanced Visualizer. Ce format … Wikipédia en Français

OBJ — Objet 3D (format de fichier) OBJ est un format de fichier contenant la description d une géométrie 3D. Il a été défini par la société Wavefront Technologies dans le cadre du développement de son logiciel d animation Advanced Visualizer. Ce format … Wikipédia en Français


[3]

  • ^ — этот символ говорит компилятору о том что переменая — блок
  • int — блок принимает один параметр типа int, и возвращает параметр типа int
  • multiplier — переменная которая приходит к нам из контекста (об этом более подробно в разделе “Захват контекста”)

Блоки имеют семантику указателя.
Блоки в Objective-C уже прочно нашли свое применение как в стандартных фреймворках (Foundation, UIKit) так и в сторонних библиотеках (AFNetworking, BlocksKit).
Приведем пример в виде категории класса NSArray

В первую очередь они отлично подходят для асинхронных операций, в этом можно убедиться используя AFNetworking, да и работать с ними в GCD — одно удовольствие.
Мы можем определять свои типы блоков, например:

С++ лямбды



Тот же самый код в виде лямбды
[11]
  • [] — начало объявления лямбды, внутри — захват контекста
  • &multiplier — захваченная переменная ( & означает что захвачена по ссылке)
  • int — входной параметр
  • mutable — ключевое слово которое позволяет модифицировать переменные захваченные по значению
  • throw() — обозначает что лямбда не выбрасывает никаких исключений наружу

Приведем аналогичный пример выделения подмножества для лямбды

Извлечение подмножества из коллекции по предикату

Захват контекста

Obj-C блоки

Мы можем автоматически использовать значения стековых переменных в блоках, если не изменяем их. Например, в приведенном выше примере, мы не указывали в объявлении блока, что мы хотим захватить переменную multiplier (в отличии от лямбды, в лямбде мы могли бы указать [&] чтобы захватить весь контекст по ссылкам, или [=] чтобы захватить весь контекст по значению).
Мы просто брали ее значение по имени объявленном в теле функции. Если бы мы захотели изменить ее значение в теле блока, нам пришлось бы пометить переменную модификатором __block

Пример изменения значения переменной из контекста

Но иногда, все же, необходимо пометить указатель на объект с помощью __block , чтобы избежать утечек памяти. (Об этом подробнее в разделе “Управление памятью”)

С++ лямбды
  • [&] — означает что мы захватываем все символы по ссылке
  • [=] — все символы по значению
  • [a, &b] — a захвачена по значению, b захвачена по ссылке
  • [] — ничего не захвачено

Управление памятью

Obj-C блоки

Блоки — это объекты, создаются они на стеке (в последситвие они могут быть перенесены в кучу (heap))
Блоки могут существовать в виде 3-х имплементаций [7].

Ошибка в этой строчке NSString *userName = [self parseResponse:responseString]; — когда мы вызываем что-то у self в Malloc блоке, self ретейнится, образовался следующий цикл в графе владения:


Избежать этого можно было создав на стеке промежуточный указатель на self с модификатором __block, вот так:

Или же, можно было перенести блоки из сигнатуры метода инициализации в метод startRequest ,
startRequestwithCompaltion:fail: , и ретейнить блоки только на время выполнения запроса. Тогда можно было бы обойтись без модификатора __block . Это решало бы еще одну проблему: в приведенном выше примере существует опасность, что к моменту вызова блока (к моменту завершения запроса) объект типа PKGetUserNameRequest уже перестанет существовать (будет вызван метод dealloc), так как блок обеспечивает слабую связь. И по указателю selfRequest будет висеть зомби, что вызовет crash.

Приведем другой пример неправильного memory management с блоками, пример взят из видео лекции [7]

Если бы мы скопировали блок в кучу (heap) и передали вверх по стеку, ошибки бы не произошло.
Также данный пример не вызовет ошибки в ARC коде.

С++ лямбды

Реализация лямбд в runtime, может быть специфична в разных компиляторах. Говорят, что управление памятью для лямбд не очень описано в стандарте.[9]
Рассмотрим распространенную имплементацию.
Лямбды в C++ — это объекты неизвестного типа, создающиеся на стеке.
Лямбды которые не захватывают никакого контекста, могут быть приведены к указателю на функцию, но все же это не означает, что они сами являются просто указателями на функцию. Лямбда — это обычный объект, с конструктором и деструктором, выделяющийся на стеке.

Приведем несколько примеров перемещения лямбды в heap

Теперь можно передать функцию в переменную-член какого-нибудь объекта.

mutable после объявления аргументов лямбды говорит о том, что вы можете изменять значения копий переменных, захваченных по значению (Значение оригинальной переменной изменяться не будет). Например, если бы мы определили лямбду так: auto lambda = [multiplier](int num) throw() mutable то могли бы изменять значение multiplier внутри лямбды, но multipler объявленный в функции не изменился. Более того, измененное значение multiplier сохраняется от вызова к вызову данного экземпляра лямбды. Можно представить это так: в экземпляре лямбды (в объекте) создаются переменные члены соответствующие переданным параметрам. Тут нужно быть осторожнее, потому что если мы скопируем экземпляр лямбды и вызовем ее, то эти переменные-члены не изменятся в оригинальной лямбде, они изменятся только в скопированной. Иногда нужно передавать лямбды обернутыми в std::ref . Obj-C блоки не предаставляют такой возможности «из коробки».

Objective-C++

Так как Objecitve-C++ сочетает в себе как Objective-C так и C++, в нем можно одновременно использовать лямбды и блоки. Как же лямбды и блоки относятся друг к другу?

    Мы можем присвоить блоку лямбду.

Здесь стоит отметить что Objective-C и C++ имеют разные политики управления памятью, и хранение блока в std::function может приводить к «висячим» ссылкам.

У лямбды не определен оператор copy-assignment. Поэтому мы не можем присвоить ей ни блок ни даже саму себя.

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

Чем открыть файл в формате OBJ

Расширение OBJ может быть представлено тремя основными исполнениями:

  • Формат OBJ относится к типу файлов Wavefront 3D Object File и предназначен для обработки и хранения данных о трехмерной модели объекта. Являясь простым текстовым форматом представления данных, OBJ расширение может содержать весь набор параметрических данных, связанный с координатами вершин 3Д-объекта и положением его в пространстве, значением нормали к каждой из сторон, и любую другую информацию, которая имеет отношение к геометрическому представлению трехмерной модели.

Принято считать, что Wavefront 3D – основной графический редактор для работы с трехмерными OBJ объектами. Однако расширение может быть легко импортировано и в другие 3Д-приложения, предназначенные для работы с изображениями, например, CADRazor или Adobe Photoshop.

Wavefront Technologies, являющийся официальным разработчиком OBJ расширения, предусмотрел хранение ссылки на файл MTL внутри формата. В MTL содержится набор структурированных данных, который дает представление о внешней геометрической форме объекта. MTL файл хранится в отдельном каталоге “Textures” и дополнительно может включать информацию о материале 3Д-модели.

OBJ – один из самых неприхотливых для импорта/экспорта форматов. Помимо стандартных систем автоматизированного проектирования (САПР) и многочисленных графических редакторов, визуализация трехмерной OBJ модели доступна и с использованием онлайн-ресурсов. В интернете собраны полномасштабные библиотеки 3Д-объектов в данном формате.

  • OBJ – объектно-ориентированный, модульный формат, предназначенный специально для программных приложений, функционирующих на базе микропроцессоре 80×86 Intel. Изначально, он назывался Object Module Format (объектно-модульный формат) и использовался на базе операционной системы MS-DOS. В таком виде OBJ расширение принято считать устаревшим.
  • Файл с расширением OBJ – результат генерации программного продукта Microsoft Visual Studio. В этом случае OBJ формат используется в качестве связующего звена между отдельными компилируемыми файлами. Таким образом, OBJ файл может принимать два типа: общий объектный файловый формат (Common Object File FormatCOFF); 32-ух битный модульный формат объекта (Object Module FormatOMF).

Программы для открытия OBJ файлов

Если OBJ расширение представляет собой параметризованный набор данных о трехмерной модели объекта, для генерации и воспроизведения его на базе ОС Windows можно воспользоваться самыми разнообразными программными комплексами:

В данном представлении OBJ адаптирован и для платформы ОС Mac:

Примечательно, что расширение может быть открыто и на базе ОС Linux с применением программных плагинов Blender, Autodesk Maya, MeshLab или GLC_Player.

Если OBJ – объектно-ориентированный, модульный формат, его воспроизведение возможно исключительно в программных приложениях на платформе операционной системы MS-DOS, функционирующей на базе устаревшего микропроцессора 80×86 Intel.

OBJ файлы в Microsoft Visual Studio генерируются автоматически и используются в качестве вспомогательных для преобразования COFF и OMF. Какое-либо редактирование формата бывает востребовано крайне редко.

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

  • поврежден или инфицирован файл;
  • файл не связан с реестром ОС (выбрано некорректное приложение для воспроизведения или не произведена инсталляция конкретного плагина);
  • недостаточно ресурсов устройства или ОС;
  • поврежденные или устаревшие драйвера.

Конвертация OBJ в другие форматы

Уникальная структура и область применения OBJ для случаев, когда формат представляет собой вспомогательный файл Microsoft Visual Studio или объектно-ориентированный, модульный файл для микропроцессора 80×86 Intel, не предоставляют возможностей для каких-либо конвертаций данного расширения.

Попытки конвертации расширения в другой формат могут не только не дать никаких практических результатов, но и повредить исходный файл. В этой связи трансляция данного формата практически не практикуется.

Конвертация OBJ в другие форматы реализуется посредством встроенного/интегрированного транслятора САПР или других программных комплексов, например, Autodesk AutoCAD или CADRazor.

Благодаря данным конверторам доступно преобразование OBJ в самые разнообразны форматы, включая STEP, STL, PRT, IGS, 3DS.

Реализовать преобразование OBJ-модели можно и с использованием одного из онлайн-трансляторов данных, например 3DToday.

Почему именно OBJ и в чем его достоинства?

OBJ формат имеет три различных представления:

  • файл, содержащий параметризованный набор данных о трехмерной модели объекта;
  • объектно-ориентированный, модульный файл, адаптированный под устаревший микропроцессор 80×86 Intel;
  • вспомогательный файл, обеспечивающий корректную работу других форматов в программе Microsoft Visual Studio.

Расширение практически не востребовано в последних двух случаях.

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

Без его наличия невозможна организованная запись геометрических параметров 3Д-объекта:

  • параметрических данных;
  • значения координат вершин 3Д-объекта;
  • положения 3D-модели в пространстве;
  • значения нормали к каждой из сторон 3Д-объекта;
  • текстуры координат.

Трехмерный объект, содержащий 3D-координаты, текстурные карты и другую информацию об объекте. Это стандартный формат 3D-изображения, который можно экспортировать и открывать в нескольких программах редактирования 3D-изображений.

Чем открыть файл в формате OBJ (Wavefront 3D Object File)

В областях IT, связанных с трёхмерной графикой, можно часто встретить модели в формате OBJ. Файл рассматриваемого формата представляет собой текстовый файл, содержащий только геометрию 3D-объектов, т.е. хранит позиции вершин, нормали к вершинам и текстурные координаты. Информация о материалах хранится в файле MTL, на который в начале файла даётся ссылка с помощью директивы mtllib.

Формат описания 3D-графики OBJ является весьма популярным, поскольку отличается простотой описания и поддерживается практически всеми 3D-редакторами. Прежде чем рассмотреть, какие программы открывают OBJ, следует отметить, что порой целью открытия файла является не просмотр модели, а, например, ознакомление со списком названий объектов, или подсчёт количества вершин. Эти и другие действия можно выполнить, открыв файл в обычном текстовом редакторе, например, Notepad++.

Итак, рассмотрим, чем же открыть файлы с расширением OBJ? Вот самые популярные программы, с помощью которых вы легко сможете посмотреть 3d-модель.

Как открыть OBJ в Blender?

Чтобы открыть файл OBJ в программе Blender в основном меню следует последовательно выбирать пункты «File» — «Import» — «Wavefont (.obj)». В открывшемся диалоговом окне потребуется указать OBJ-файл и нажать кнопку «Import OBJ».




Внимание! Для того, чтобы помимо полигонов отображались и текстуры, необходимо чтобы в файле OBJ были верно прописаны пути до MTL-файла, а в MTL-файле верно указаны пути до картинок.

Как открыть OBJ в 3D Max?

Ещё одна очень популярная программа для 3D-моделирования — Autodesk 3ds Max. В ней также следует воспользоваться функцией импорта сторонних файлов: «Import» — «Import non-native file formats into 3ds Max».

Как открыть OBJ в Sketchup?

Программа SketchUp доступна как в виде десктопного приложения, так и в виде онлайн-редактора. Для онлайн-версии потребуется регистрация учётной записи. Как любой другой 3D-редактор, Скетчап поддерживает импорт множества форматов, в том числе и расширения OBJ. Для иморта следует воспользоваться плагином «OBJ Importer», находящимся во вкладке «Plugins». В выпадающем подменю доступно два варианта импорта — as OBJ и as Mesh.


Как открыть формат OBJ в Архикаде?

В Archicad нет возможности напрямую открыть файл OBJ. Чтобы просмотреть модель в Архикаде потребуется:

1. Преобразовать файл формата OBJ в 3DS. Для этого можно воспользоваться программами 3DS Max, Cinema 4K и др.
2. Импортировать 3DS стандартными средствами: «Взаимодействие» — «3D Studio» — «Импортировать 3DS в виде объекта GDL…».




Как открыть OBJ в MeshLab?

Для того, чтобы загрузить модель формата OBJ в программе MeshLab следует в верхнем меню перейти по пунктам «File» — «Import Mesh…». После выбора нужного файла 3d-модель откроется в центральном окне приложения. Для удобства просмотра можно воспользоваться кнопками включения/отключения отображения вершин, границ и полигонов.





Как открыть OBJ онлайн?


В верхнем меню выбираем пункты «File» — «Import». В открывшемся диалоге следует перейти в каталог, где расположен obj-файл. Выбрав его, модель загрузится в редактор, где её можно наглядно рассмотреть, увеличивая и поворачивая.

Расширение OBJ

Чем открыть файл OBJ

В Windows: CADRazor, LogiKal, UVMapper, Blender, LightWave 3D, Adobe Photoshop, NewTek Lightwave 3D, Autodesk Maya, DAZ 3D DAZ Studio, IMSI TurboCAD Deluxe, MeshLab, MAXON Cinema 4D, Smith Micro Poser, Autodesk AutoCAD с плагином для импорта OBJ, Dassault Systemes SolidWorks с плагином для импорта OBJ, Siemens Solid Edge с плагином для импорта OBJ
В Mac OS: Blender, Adobe Photoshop, NewTek Lightwave 3D, Autodesk Maya, DAZ 3D DAZ Studio, IMSI TurboCAD Deluxe, Cheetah3D, MeshLab, MAXON Cinema 4D, Smith Micro Poser
В Linux: Blender, Autodesk Maya, MeshLab, GLC_Player
Кроссплатформенное ПО: Rapidform Explorer

Описание расширения OBJ


Популярность:

Разработчик: Wavefront Technologies

Расширение OBJ обычно используется для стандартизированных файлов, содержащих 3D-объекты. Обычно .OBJ – это простой текстовый формат данных, который представляет только 3D геометрические объекты, например, положение каждой вершины, текстура координат, связанные с вершиной, нормаль каждой вершины, параметры полигона и определения поверхности(сторон). Формат OBJ так же иногда называют форматом объектов Wavefront 3D от Wavefront Technologies для программы Advanced Visualizer.

Файл OBJ объектов Wavefront 3D может быть экспортирован и/или импортирован и открыт несколькими другими 3D программами, форматы немного различаются. OBJ хранит ссылку на файл MTL с помощью инструкции: mtllib [имя файла MTL]. MTL содержит информацию о внешнем виде объектов.

MIME тип: text/plain
HEX код: 23 57 61 76 65 66 72 6F 6E 74 20 4F 42 4A 20 66 (Wavefront), 23 20 42 6C 65 6E 64 65 72 (Blender 3D), 76 20 (CADRazor 3d), 23 20 66 69 6C 65 20 67 65 6E 65 72 61 74 65 64 (UVMapper).

Другие программы, связанные с расширением OBJ

    Модульный объектный файл Intel от Intel
    Расширение .OBJ – модульный объектный файл Intel, который используется в основном для программ, предназначенных для работы на микропроцессоре 80×86 Intel. Первоначально он был разработан Intel под названием объектный модульный формат (от англ. Object Module Format), и, пожалуй, больше всего был известен для пользователей MS-DOS в виде файла OBJ. С тех пор он был стандартизирован комитетом Tool Interface Standards Committee. Данный формат является устаревшим.


Популярность:

    Объектный файл Microsoft Visual Studio от Microsoft Corporation
    Расширение файла OBJ связан с программой Microsoft Visual Studio. *.OBJ файлы используются для объектных файлов, которые компилируются, но не связаны между собой. LINK принимает .OBJ файлы, которые являются либо общим форматом объектных файлов (Common Object File Format – COFF) или 32-битным форматом модулей объекта (Object Module Format – OMF). Компилятор Microsoft Visual C++ создает COFF файлы .OBJ.

Линкер автоматически преобразует 32-разрядные объекты OMF в COFF. Тем не менее, существуют ограничения преобразования в OMF в COFF. OMF может представлять некоторые вещи, которые не могут быть представлены в COFF. Если есть ошибки, когда компоновщик преобразует OMF в COFF, тогда вам нужно будет использовать COFF файл .OBJ вместо файла OMF *.OBJ в качестве входного в линкер.

HEX код: 21 3C 61 72 63 68 3E 0A 2F 20 20 20 20 20 20 20


Популярность:

Данные вы читаете на основе первого символа в строке.

Прочитав все такие линии, вы получите геометрию обьекта.

// пример: vt .99998 .99936

Если есть UV координаты, она содержит также и их индексы.

// пример: (Только вершины): f 1 2 3

// пример: (Вершины и текстуры): f 1/1 2/2 3/3

Теперь напишем класс, загружающий .obj-файл.

Новый файл: obj.h :

// Вы будете вызывать только эту функцию. Просто передаёте структуру
// модели для сохранения данных, и имя файла для загрузки.
bool ImportObj ( t3DModel * pModel , char * strFileName ) ;

// Главный загружающий цикл, вызывающийся из ImportObj()
void ReadObjFile ( t3DModel * pModel ) ;

// Вызывается после загрузки информации полигонов
void FillInObjectInfo ( t3DModel * pModel ) ;

// Вычисление нормалей. Это не обязятельно, но очень желательно.
void ComputeNormals ( t3DModel * pModel ) ;

// Чтобы проще присваивать материал к .obj обьекту, создадим для этого функцию.
// Передаём в неё модель, имя материала, имя файла текстуры и цвет RGB.
// Если нам нужен только цвет, передаём NULL для strFile.
void AddMaterial ( t3DModel * pModel , char * strName , char * strFile ,
int r = 255 , int g = 255 , int b = 255 ) ;

// Указатель на файл
FILE * m_FilePointer ;

// STL vector, содержащий список вершин
vector < CVector3 > m_pVertices ;

// STL vector, содержащий список полигонов
vector < tFace > m_pFaces ;

// STL vector, содержащий список UV координат
vector < CVector2 > m_pTextureCoords ;

// Говорит нам, имеет ли обьект текстурные координаты
bool m_bObjectHasUV ;

// Говорит нам, что мы только что прочитали данные полигонов, чтобы мы могли читать несколько обьектов
bool m_bJustReadAFace ;
> ;

// Убедимся, что переданы не пустые модель и имя файла
if(!pModel || !strFileName) return false;

// Теперь, имея открытый файл, считываем информацию
ReadObjFile(pModel);

// Прочитав всю информацию, вычисляем вершинные нормали
ComputeNormals(pModel);

// Закрываем файл
fclose(m_FilePointer);

// И возвращаем true
return true;
>

void CLoadObj::ReadObjFile(t3DModel *pModel)
char strLine[255] = ;
char ch = 0;

while(!feof(m_FilePointer))
float x = 0.0f, y = 0.0f, z = 0.0f;

// Читаем первый символ текущей строки файла
ch = fgetc(m_FilePointer);

// Если мы только что читали информацию о полигоне, а сейчас читаем вершину,
// значит мы перешли к следующему обьекту, и нужно сохранить данные предыдущего.
if(m_bJustReadAFace) // Сохраняем данные последнего обьекта в структуру модели
FillInObjectInfo(pModel);
>

// Расшифровываем всю текущую линию
ReadVertexInfo();
break;

// Нужно считать информацию о полигоне. Строки полигонов могут
// содержать или индексы вершин, или ещё и текстурные координаты,
// если они есть у обьекта.
ReadFaceInfo();
break;

// Теперь сохраняем последний прочитанный обьект
FillInObjectInfo(pModel);
>

void CLoadObj::ReadVertexInfo()
CVector3 vNewVertex = ;
CVector2 vNewTexCoord = ;
char strLine[255] = ;
char ch = 0;

// Читаем второй сисвол строки, чтобы увидеть, что содержит строка: вершины/нормали/UV
ch = fgetc(m_FilePointer);

// Читаем остальную линию, чтобы перейти к следующей
fgets(strLine, 100, m_FilePointer);

// Читаем оставшуюся линию, чтобы перейти к следующей
fgets(strLine, 100, m_FilePointer);

// Вносим новые текстурные координаты в список
m_pTextureCoords.push_back(vNewTexCoord);

void CLoadObj::ReadFaceInfo()
tFace newFace = ;
char strLine[255] = ;

// Читаем линию до конца, чтобы перейти к следующей
fgets(strLine, 100, m_FilePointer);

// Добавляем новый полигон в список
m_pFaces.push_back(newFace);

OBJ (или .OBJ) - это геометрия формат файла определения, впервые разработанный Wavefront Technologies для пакета анимации Advanced Visualizer . Формат файла открыт и был принят другими поставщиками приложений для 3D-графики.

Формат файла OBJ - это простой формат данных, который представляет только трехмерную геометрию, а именно положение каждой вершины , положение UV каждой вершины координат текстуры. , нормали вершин и грани, которые определяют каждый многоугольник как список вершин и вершин текстуры. По умолчанию вершины хранятся в порядке против часовой стрелки, поэтому явное объявление нормалей граней не требуется. Координаты OBJ не имеют единиц измерения, но файлы OBJ могут содержать информацию о масштабе в удобочитаемой строке комментариев.

Содержание

Формат файла

Файл OBJ может содержать данные вершин, атрибуты кривой / поверхности произвольной формы, элементы, утверждения тела кривой / поверхности произвольной формы, связь между поверхностями произвольной формы , группирование и отображение / рендеринг атрибутивной информации. Наиболее распространенными элементами являются геометрические вершины, координаты текстуры, нормали вершин и многоугольные грани:

Геометрическая вершина

A вершину можно указать в строке, начинающейся с буквы v . Затем следуют координаты (x, y, z [, w]). W не является обязательным и по умолчанию имеет значение 1.0. Некоторые приложения поддерживают цвета вершин, помещая значения красного, зеленого и синего после x y и z. Диапазон значений цвета от 0 до 1.

Вершины пространства параметров

Оператор геометрии произвольной формы может быть указан в строке, начинающейся со строки vp . Определите точки в пространстве параметров кривой или поверхности. u требуется только для точек кривой, u и v для точек поверхности и контрольных точек нерациональных кривых обрезки, а также u , v и w (вес) для контрольных точек рациональных кривых обрезки.

Элементы Face

Face определяются с использованием списков индексов вершин, текстуры и нормалей в формате vertex_index / texture_index / normal_index, для которых каждый индекс начинается с 1 и увеличивается в соответствии с порядком, в котором указанный элемент был определен. Многоугольники, например четырехугольники, можно определить с помощью более трех индексов.

Файлы OBJ также поддерживают геометрию произвольной формы, которая использует кривые и поверхности для определения объектов, таких как поверхности NURBS .

Индексы вершин

Действительный индекс вершин соответствует соответствующим элементам вершин в ранее определенном списке вершин. Если индекс положительный, то он относится к смещению в этом списке вершин, начиная с 1. Если индекс отрицательный, то он относительно относится к концу списка вершин, -1 относится к последнему элементу.

Каждая грань может содержать три или более вершины.

Индексы координат текстуры вершин

Дополнительно, индексы координат текстуры могут использоваться для указания координат текстуры при определении грани. Чтобы добавить индекс координаты текстуры к индексу вершины при определении грани, необходимо поставить косую черту сразу после индекса вершины, а затем поставить индекс координаты текстуры. Пробелы до или после косой черты не допускаются. Действительный индекс координат текстуры начинается с 1 и соответствует соответствующему элементу в ранее определенном списке координат текстуры. Каждая грань может содержать три или более элементов.

Нормальные индексы вершин

Дополнительно, нормальные индексы могут использоваться для указания нормальных векторов для вершин при определении лицо. Чтобы добавить нормальный индекс к индексу вершины при определении грани, нужно поставить вторую косую черту после индекса координаты текстуры, а затем поставить нормальный индекс. Действительный нормальный индекс начинается с 1 и соответствует соответствующему элементу в ранее определенном списке нормалей. Каждая грань может содержать три или более элементов.

Нормальные индексы вершин без индексов координат текстуры

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

Линейные элементы

Записи, начинающиеся с буквы «l», определяют порядок вершин которые строят ломаную линию.

Другие геометрические форматы

Файлы Obj поддерживают поверхности более высокого порядка с использованием нескольких различных видов интерполяции, таких как Taylor и B -splines, хотя поддержка этих функций в сторонних программах для чтения файлов далеко не универсальна. Файлы Obj также не поддерживают иерархии сеток или какие-либо виды анимации или деформации, такие как скиннинг вершин или морфинг сетки.

Ссылки на материалы

, которые описывают визуальные аспекты многоугольников, хранятся во внешних файлах .mtl. На более чем один внешний файл материала MTL можно ссылаться из файла OBJ. Файл .mtl может содержать одно или несколько определений именованных материалов.

Этот тег определяет имя материала для элемента, следующего за ним. Имя материала соответствует названному определению материала во внешнем файле .mtl.

Именованные объекты и группы полигонов указываются с помощью следующих тегов.

Плавное затенение по полигонам включается с помощью групп сглаживания.

Относительные и абсолютные индексы

OBJ-файлы, благодаря своей структуре списка, могут ссылаться на вершины, нормали и т. д. либо по их абсолютному положению (1 представляет собой первое определенная вершина, N представляет N-ю определенную вершину), или по их относительному положению (-1 представляет последнюю определенную вершину). Однако не все программное обеспечение поддерживает последний подход, и, наоборот, некоторые программы по своей сути записывают только последнюю форму (из-за удобства добавления элементов без необходимости пересчитывать смещения вершин и т. Д.), Что иногда приводит к несовместимости.

Библиотека шаблонов материалов

Формат библиотеки шаблонов материалов (MTL) или формат файла .MTL - это формат файла-компаньона для .OBJ, также определяемый Wavefront Technologies , который описывает затенение поверхности (материал) свойства объектов в одном или нескольких файлах .OBJ. Файл .OBJ ссылается на один или несколько файлов .MTL (называемых «библиотеками материалов»), а оттуда ссылается на одно или несколько описаний материалов по имени. Файлы .MTL представляют собой текст ASCII , который определяет светоотражающие свойства поверхности для целей компьютерной визуализации и в соответствии с моделью отражения Фонга . Стандарт получил широкую поддержку среди различных компьютерных программных пакетов, что делает его полезным форматом для обмена материалами.

Формат MTL, хотя до сих пор широко используется, устарел и не полностью поддерживает более поздние технологии, такие как карты отражений и карты параллакса . Однако из-за открытого и интуитивно понятного характера формата их можно легко добавить с помощью специального генератора файлов MTL.

Формат MTL определяет ряд форматов.

Основные материалы

В одном файле .mtl может быть определено несколько материалов. Материалы определяются в файле один за другим, каждый из которых начинается с команды newmtl :

ambient цвет материала указывается с помощью Ka . Цвета определены в RGB, где значение каждого канала находится в диапазоне от 0 до 1.

Аналогично, диффузный цвет объявляется с помощью Kd .

Цвет specular объявлен с использованием Ks и взвешен с использованием specular exponent Ns .

Материалы могут быть прозрачными . Это называется растворением. В отличие от настоящей прозрачности, результат не зависит от толщины объекта. Значение 1,0 для «d» является значением по умолчанию и означает полную непрозрачность, как и значение 0,0 для «Tr». Dissolve работает на всех моделях освещения.

Прозрачные материалы могут дополнительно иметь цвет фильтра передачи, указанный с помощью «Тф».

Материал также может иметь оптическую плотность для своей поверхности. Это также известно как показатель преломления .

Значения могут находиться в диапазоне от 0,001 до 10. Значение 1,0 означает, что свет не изгибается при прохождении через объект. Увеличение оптической плотности увеличивает величину изгиба. Стекло имеет показатель преломления около 1,5. Значения меньше 1,0 дают странные результаты и не рекомендуются.

Доступно несколько моделей освещения для каждого материала. Обратите внимание, что не требуется устанавливать прозрачную модель освещения для достижения прозрачности с помощью «d» или «Tr», а в современном использовании модели освещения часто не указываются, даже с прозрачными материалами. Модели освещения пронумерованы следующим образом:

Текстурные карты

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

Операторы карты текстуры могут также иметь параметры опции (см. полную спецификацию ).

Параметры текстуры

Изменения, специфичные для поставщика

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

Согласно спецификации, параметры должны предшествовать имени файла текстуры. Однако по крайней мере один поставщик создает файлы с параметрами в конце.

Физический рендеринг

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

Читайте также: