→ Что значит obj. Расширение файла OBJ. Программы для открытия или конвертации OBJ файлов

Что значит obj. Расширение файла OBJ. Программы для открытия или конвертации OBJ файлов

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

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

Формат файла

Строки, начинающиеся с решётки(#), - это комментарии.

# Это комментарий

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

# Список вершин, с координатами (x,y,z[,w]), w является не обязательным и по умолчанию 1.0. v 0.123 0.234 0.345 1.0 v ... ... # Текстурные координаты (u,v[,w]), w является не обязательным и по умолчанию 0. # Текстурная координата по y может быть указана как 1 - v, и при этом по x = u vt 0.500 -1.352 vt ... ... # Нормали (x,y,z); нормали могут быть не нормированными . . vn 0.707 0.000 0.707 vn ... ... # Параметры вершин в пространстве (u [,v] [,w]); свободная форма геометрического состояния (смотри ниже) vp 0.310000 3.210000 2.100000 vp ... ... # Определения поверхности (сторон) (смотри ниже) f 1 2 3 f 3/1 4/2 5/3 f 6/4/1 3/5/3 7/6/5 f 6//1 3//3 7//5 f ... ... # Группа g Group1 ... # Объект o Object1

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

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

Вершины

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

F v1 v2 v3 v4 ...

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

Вершины / Текстурные координаты

Наряду с вершинами могут сохраняться соответствующие индексы текстурных координат.

F v1/vt1 v2/vt2 v3/vt3 v4/vt4 ...

Вершины / Текстурные координаты / Нормали

Также допустимо сохранение соответствующих индексов нормалей.

F v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 v4/vt4/vn4 ...

Вершины / / Нормали

При отсутствии данных о текстурных координатах допустима запись с пропуском индексов текстур.

F v1//vn1 v2//vn2 v3//vn3 v4//vn4 ...

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

Краткий обзор

OBJ является одним из самых популярных форматов передачи 3-х мерной компьютерной геометрии. Информация о внешнем виде объектов(материалы) передается в файлах-спутниках в формате MTL (Material Library). OBJ при необходимости ссылается на такой файл с помощью директивы:

Mtllib [имя внешнего MTL файла]

Введение

MTL является стандартом, установленным компанией Wavefront Technologies. Вся информация представлена в ASCII виде и абсолютно читабельна для человека. Стандарт MTL так же очень популярен и поддерживается большинством пакетов для работы с 3D-графикой.

Информация о простых материалах в файле выглядит следующим образом:

Newmtl название_материала1 # Объявление очередного материала # Цвета Ka 1,000 1,000 0,000 # Цвет окружающего освещения (желтый) Kd 1,000 1,000 1,000 # Диффузный цвет (белый) # Параметры отражения Ks 0,000 0,000 0,000 # Цвет зеркального отражения (0;0;0 - выключен) Ns 10,000 # Коэффициент зеркального отражения (от 0 до 1000) # Параметры прозрачности d 0,9 # Прозрачность указывается с помощью директивы d Tr 0,9 # или в других реализациях формата с помощью Tr #Следующий материал newmtl название_материала2 ...

Наличие всех параметров необязательно. При отсутствии какого-либо параметра программа автоматически устанавливает его по умолчанию.

Наш план действий будет таким – загрузить файл в память полностью и создать строку для каждой его строки. Мы также создадим временные массивы чисел с плавающей точкой для всех позиций вершин, координат текстур и нормалей, которые мы собираемся загрузить. Их размер равен количеству строк OBJ-файла, умноженному на количество компонент атрибута, – два для координат текстур или три для нормалей. Благодаря этому мы выделим памяти больше, чем необходимо, но это лучше, чем выделять память для новых массивов всякий раз, когда их понадобится пополнить.

То же самое мы сделаем для индексов, определяющих каждый треугольник. Поскольку формат OBJ является индексированным, мы не можем передать эти индексы непосредственно в класс Vertices3.

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

Посмотрим, как мы можем реализовать все это. Код этого класса содержится в листинге 11.12.

Листинг 11.12. Класс ObjLoader.java. простой класс, предназначенный для загрузки подмножества формата 0BJ

Первое, что мы делаем, – открываем в потоке InputStream файл с моделью, определяемый параметром fi1е. Потом в методе readLines (определенном далее) мы считываем все строки этого файла. Основываясь на количестве строк, мы выделяем память для массивов чисел с плавающей точкой, которые будут хранить компоненты осей х, у и z каждой нормали вершин, а также и- и -координаты текстур каждой вершины. Поскольку мы не знаем, сколько именно вершин мы увидим в файле, просто выделяем больше памяти, чем требуется. Каждый атрибут вершины хранится в последовательных элементах трех массивов. Позиция первой считанной вершины представлена элементами массива vertices, vertices и vertices и т. д. Мы также отслеживаем индексы при определении треугольников для каждого из трех атрибутов вершины. В дополнение у нас есть несколько счетчиков для отслеживания того, как много всего мы уже загрузили.

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

Мы делаем то же самое для нормалей и координат текстур:

В этом коде каждая вершина треугольника (названного здесь face (ребро) из-за терминологии формата OBJ) определяется тройкой индексов в массивах позиции вершин, координат текстур и нормалей. Индексы координат текстур и нормалей могут быть опущены, поэтому нам нужно следить за ними. Индексы также могут быть отрицательными, в этом случае нам придется добавлять их к количеству позиций/координат текстур/нормалей, загруженных ранее. Этим занимается метод getlndex.

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

Чтобы заполнить массив verts, мы просто проходим по всем треугольникам, получаем атрибуты каждой вершины треугольника и помещаем их в массив verts по шаблону, который используется экземпляром класса Verti ces3.

Последнее, что мы делаем, – создаем экземпляр класса Vertices3 и устанавливаем вершины.

Остальная часть метода посвящена обработке исключений и закрытию потока InputStream.

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

Наконец, рассмотрим метод readlines, который просто считывает каждую строку файла и возвращает их все как список строк.

Чтобы загрузить OBJ-файл из ресурса, мы можем использовать класс Ob j Loader следующим образом:

Довольно прямолинейно после всей этой чехарды с индексами, не правда ли? Для отрисовки этого экземпляра класса Vertices3 нам необходимо знать, сколько он имеет вершин. Расширим класс Verti ces3 еще раз, добавив два метода, возвращающих количество вершин и количество индексов, которые определены в объекте в данный момент. Код этих методов содержится в листинге 11.13.

Листинг 11.13. Фрагменты класса Vertices3.java, получение количества вершин и индексов

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

Поскольку мы храним это количество байтов в параметре vertexSize, мы делим этот член класса на 4.

Использование класса OBJ Loader

Чтобы продемонстрировать работу загрузчика файлов OBJ, я переписал последний пример и создал новый тест, который называется ObjTest, а также экран ObjScreen. Я скопировал весь код из предыдущего примера и изменил только одну строку конструктора класса ObjScreen:

Поэтому вместо использования метода createCube (который я убрал) теперь мы напрямую загружаем модель из файла с расширением OBJ, который называется cube.obj. В программе Wings3D я создал копию куба, которую мы ранее создавали программно в методе createCube . Она имеет те же позиции вершин, текстурные координаты и нормали, что и созданная вручную версия. Вас не должно удивлять то, что результат работы программы ObjTest выглядит точно так же, как и результат работы Eul erCameraTest. Поэтому я не буду приводить скриншот.

Несколько замечаний по загрузке моделей

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

Обработка строк в ОС Android по определению медленная. OBJ – это формат, использующий неформатированный текст, поэтому он требует больших затрат времени на свое преобразование. Это отрицательно повлияет на время загрузки. Вы можете обойти эту проблему, преобразуя ваши OBJ-модели в пользовательский бинарный формат. Вы можете, например, сериализовать массив verts таким образом, что мы заполняем его в методе ObjLoader. load О.

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

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

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

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

Wavefront Technologies , являющийся официальным разработчиком OBJ расширения, предусмотрел хранение ссылки на файл внутри формата. В 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 Format - COFF ); 32-ух битный модульный формат объекта (Object Module Format - OMF ).

Программы для открытия 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 формат имеет три различных представления:

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

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

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

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

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

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

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

В дальнейшей части этой страницы Вы найдете другие возможные причины, вызывающие проблемы с файлами OBJ.

Возможные проблемы с файлами в формате OBJ

Отсутствие возможности открытия и работы с файлом OBJ, совсем не должен значить, что мы не имеем установленного на своем компьютере соответствующего программного обеспечения. Могут выступать другие проблемы, которые также блокируют нам возможность работы с файлом 3D Object Format. Ниже находится список возможных проблем.

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

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

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

Например, на данном рисунке выделен файл my-file.obj , далее необходимо щелкнуть правой кнопкой мыши по этому файлу, и в меню файла выбрать опцию «сканировать с помощью AVG» . При выборе данного параметра откроется AVG Antivirus, который выполнит проверку данного файла на наличие вирусов.


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

Иногда простая переустановка Autodesk AutoCAD Ecscad может решить вашу проблему, правильно связав OBJ с Autodesk AutoCAD Ecscad. В других случаях проблемы с файловыми ассоциациями могут возникнуть в результате плохого программирования программного обеспечения разработчиком, и вам может потребоваться связаться с разработчиком для получения дополнительной помощи.


Совет: Попробуйте обновить Autodesk AutoCAD Ecscad до последней версии, чтобы убедиться, что установлены последние исправления и обновления.


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


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


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

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


Совет: Если при попытке открыть файл OBJ вы получаете сообщение об ошибке, связанной с.SYS file , проблема, вероятно, может быть связана с поврежденными или устаревшими драйверами устройств , которые необходимо обновить. Данный процесс можно облегчить посредством использования программного обеспечения для обновления драйверов, такого как DriverDoc .


Если шаги не решили проблему , и у вас все еще возникают проблемы с открытием файлов OBJ, это может быть связано с отсутствием доступных системных ресурсов . Для некоторых версий файлов OBJ могут потребоваться значительный объем ресурсов (например, память/ОЗУ, вычислительная мощность) для надлежащего открытия на вашем компьютере. Такая проблема встречается достаточно часто, если вы используете достаточно старое компьютерное аппаратное обеспечение и одновременно гораздо более новую операционную систему.

Такая проблема может возникнуть, когда компьютеру трудно справиться с заданием, так как операционная система (и другие службы, работающие в фоновом режиме) могут потреблять слишком много ресурсов для открытия файла OBJ . Попробуйте закрыть все приложения на вашем ПК, прежде чем открывать Wavefront 3D Object File. Освободив все доступные ресурсы на вашем компьютере вы обеспечите налучшие условия для попытки открыть файл OBJ.


Если вы выполнили все описанные выше шаги , а ваш файл OBJ по-прежнему не открывается, может потребоваться выполнить обновление оборудования . В большинстве случаев, даже при использовании старых версий оборудования, вычислительная мощность может по-прежнему быть более чем достаточной для большинства пользовательских приложений (если вы не выполняете много ресурсоемкой работы процессора, такой как 3D-рендеринг, финансовое/научное моделирование или интенсивная мультимедийная работа). Таким образом, вполне вероятно, что вашему компьютеру не хватает необходимого объема памяти (чаще называемой «ОЗУ», или оперативной памятью) для выполнения задачи открытия файла.

 

 

Это интересно: