Смотреть что такое "Obj" в других словарях. Расширение файла OBJ Программы для работы с файлами obj

В областях 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 онлайн?

Если на компьютере не оказалось ни одной из перечисленных программ, а времени скачивать их нет, то можно воспользоваться онлайн-просмотрщиком файлов с расширением OBJ. Для этого достаточно вбить в поисковик фразу «obj открыть онлайн». В качестве такого онлайн редактора можно использовать https://threejs.org/editor/ - написан на движке Three.js, позволяющий работать с 3d-графикой посредством WebGL.

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

Формат OBJ применяется в самых разнообразных приложениях, разрабатывающих 3D-графику, в частности в Microsoft Visual Studio и CADRazor.

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

Файлы OBJ создаются также несколькими компиляторами для Windows, например. C и C++ . В результате обработки исходного кода файла появляется файл с расширением.obj. Когда все файлы исходного кода скомпилированны в файлы OBJ, они связываются друг с другом для формирования файла EXE или DLL.

Название (англ.): OBJ geometry format

Название (рус.): Формат геометрии OBJ

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

Описание: OBJ или OBJ geometry format представляет собой открытый формат файлов описания геометрии. Данный формат был разработан компанией Wavefront Technologies и первоначально предназначался для приложения Advanced Visualizer. Файлы этого типа относятся к категории трехмерных изображений, моделей. Файл OBJ может включать с себя карты текстур, 3D-координаты и другие информационные объекты. Также OBJ-файл может хранить исключительно текстовые данные, например параметры полигонов, связи, позиции вершин и т.п. В настоящее время формат OBJ используется в различных приложениях для создания моделей и трехмерной графики.

Для открытия (редактирования) файла этого формата можно использовать следующие программы:

Формат 2

Название (англ.): Relocatable Object Code

Название (рус.): Объектный файл

Разработчик: Intel

Описание: OBJ также известный как Relocatable Object Code представляет собой стандартизированный формат объектного файла используемого в программном обеспечении, работающем на микропроцессорах Intel 80x86. Разработчиком формата является Intel – одна из крупнейших компаний, специализирующихся на производстве цифровых устройств и компьютерных компонентов. Предназначается формат OBJ для хранения объектных данных. На данный момент OBJ считается устаревшим. Встретить его можно только в программах, работающих под управлением операционной системы MS-DOS. Отнести его можно к категории файлов данных.

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

Код урока взят из урока "загрузка текстур".
Минус формата.obj - он не хранит информации о материалах, так что мне пришлось придумать другой способ.
Я бы не стал использовать этот формат для демки или игры, но полезно уметь с ним обращатся, так как
он очень прост и популярен. Вообще, надо было написать этот урок раньше загрузки 3sd...

В этом уроке мы будем использовать STL vector. Что это такое я подробно описал в уроке "загрузка.3ds".

Вот небольшое описание формата OBJ. Каждая программа, экспортирующая и импортирующая этот формат,
делает это по-своему. Некоторые сохраняют нормали, некоторые - имена обьектов, и так далее.

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

"v" - эта линия содержит вершину (x y z)

// пример: v -1 -1 0

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

"vt" - текстурные координаты обьекта (U V)

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

"f" - эта линия содержит индексы вершин для массива полигонов.
Если есть UV координаты, она содержит также и их индексы.

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

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

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

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

#ifndef _OBJ_H
#define _OBJ_H

#include "main.h"

// Класс, загружающий файл формата OBJ
class CLoadObj {

public:

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

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

// Вызывается в ReadObjFile() если линия начинается с "v"
void ReadVertexInfo() ;

// Вызывается в ReadObjFile() если линия начинается с "f"
void ReadFaceInfo() ;

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

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

// Так как.obj файлы не хранят имен текстур и информации о материалах, мы создадим
// функцию, устанавливающую их вручную. materialID - индекс для массива pMaterial нашей модели.
void SetObjectMaterial(t3DModel * pModel, int whichObject, int materialID) ;

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

private:

// Указатель на файл
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;
} ;

#endif

Файл obj.cpp :
#include "main.h"
#include "obj.h"


///// Функция загружает файл.obj в указанную переменную из указанного имени файла
///////////////////////////////// IMPORT OBJ \\\\\\\\\\\\\\\\*

Bool CLoadObj::ImportObj(t3DModel *pModel, char *strFileName)
{
char strMessage = {0}; // Будет использоваться для сообщения об ошибке

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

// Открываем указанный файл для чтения
m_FilePointer = fopen(strFileName, "r");

// Убедимся, что файл правильно открыт
if(!m_FilePointer) {
// Сформируем сообщение об ошибке
sprintf(strMessage, "Unable to find or open the file: %s", strFileName);
MessageBox(NULL, strMessage, "Error", MB_OK);
return false;
}

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

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

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

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


///// Эта функция - главный цикл чтения файла.obj
///////////////////////////////// READ OBJ FILE \\\\\\\\\\\\\\\\*

Void CLoadObj::ReadObjFile(t3DModel *pModel)
{
char strLine = {0};
char ch = 0;

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

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

Switch(ch)
{
case "v": // Проверяем, не "v" ли это (может быть вершина/нормаль/текст. коорд.)

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

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

Case "f": // Если первый символ -"f", эта строка описывает полигон

// Если прочитан символ новой строки - это пустая строка, ничего не делаем.
break;

Default:
// Если что-то неизвестное, просто читаем эту строку в "мусор", чтобы перейти
// к следующей - нам она не нужна.

break;
}
}

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


///// Эта функция читает информацию о вершинах ("v" вершина: "vt" UVCoord)
///////////////////////////////// READ VERTEX INFO \\\\\\\\\\\\\\\\*

Void CLoadObj::ReadVertexInfo()
{
CVector3 vNewVertex = {0};
CVector2 vNewTexCoord = {0};
char strLine = {0};
char ch = 0;

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

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

// Добавляем новую вершину в список
m_pVertices.push_back(vNewVertex);
}
else if(ch == "t") // Если второй символ - "t", строка содержит UV координаты ("vt")
{
// Читаем текстурные координаты. Формат: "vt u v"
fscanf(m_FilePointer, "%f %f", &vNewTexCoord.x, &vNewTexCoord.y);

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

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

// Активируем флаг, сообщающий, что обьект имеет текстурные координаты.
// Теперь мы знаем, что строки полигонов будут содержать индексы не только
// вершин, но и текст. координат ("f 1/1 2/2 3/3")
m_bObjectHasUV = true;
}
else // Иначе это, видимо, нормаль, и нам она не нужна ("vn")
{
// Мы рассчитываем собственные нормали, так что пропустим строку
fgets(strLine, 100, m_FilePointer);
}
}


///// Читает информацию полигона ("f")
///////////////////////////////// READ FACE INFO \\\\\\\\\\\\\\\\*

Void CLoadObj::ReadFaceInfo()
{
tFace newFace = {0};
char strLine = {0};

// Функция читает информацию о полигонах обьекта.
// Эта информация - 3д точки, составляющие полигон, и UV координаты,
// если на обьект наложена текстура.
// Если обьект имеет текстурные координаты, формат строки будет
// такой: "f v1/uv1 v2/uv2 v3/uv3"
// Иначе такой: "f v1 v2 v3"
// Внимание! Всегда убеждайтесь, что вычитаете 1 из индексов, так как
// массивы в c++ начинаются с 0, а индексы в.obj начинаются с 1.

// Проверяем, имеет ли обьект текстурные координаты
if(m_bObjectHasUV)
{
// Читаем индексы вершин и текстурных координат.
fscanf(m_FilePointer, "%d/%d %d/%d %d/%d", &newFace.vertIndex, &newFace.coordIndex,
&newFace.vertIndex, &newFace.coordIndex,
&newFace.vertIndex, &newFace.coordIndex);
}
else // если обьект НЕ содержит текстурных координат
{
// Читаем только индексы вершин
fscanf(m_FilePointer, "%d %d %d", &newFace.vertIndex,
&newFace.vertIndex,
&newFace.vertIndex);
}

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

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

// Устанавливаем этот флаг в TRUE, чтобы знать, что только что читали полигон. Если
// после этого читается вершина - значит, мы перешли к следующему обьекту и нужно
// сохранить этот.
m_bJustReadAFace = true;

Расширение 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Д-объекта;
  • текстуры координат.