Смотреть что такое "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Д-объекта;
- текстуры координат.