Софт-Портал

формат Obj чем открыть

Рейтинг: 4.7/5.0 (226 проголосовавших)

Категория: Windows

Описание

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

Чем открыть OBJ Описание формата OBJ

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

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

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

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

Какой программой открыть файл с раширением OBJ
  • Sweet Home 3D
  • modo
  • ZBrush
  • Artec ViewShape
  • Print3D Application

File extension OBJ, расширение OBJ - данная страница может содержать неточности, поэтому используйте форму обратной связи для их исправления.

формат obj чем открыть:

  • скачать
  • скачать
  • Другие статьи, обзоры программ, новости

    Загрузка моделей формата

    Поиск фотографий по гео-локации:

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

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

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

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

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

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

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

    "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

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

    // Вы будете вызывать только эту функцию. Просто передаёте структуру
    // модели для сохранения данных, и имя файла для загрузки.
    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 ) ;

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

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

    bool CLoadObj::ImportObj(t3DModel *pModel, char *strFileName)
    <
    char strMessage[255] = <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;
    >

    void CLoadObj::ReadObjFile(t3DModel *pModel)
    <
    char strLine[255] = <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', эта строка описывает полигон

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

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

    default:
    // Если что-то неизвестное, просто читаем эту строку в "мусор", чтобы перейти
    // к следующей - нам она не нужна.
    fgets(strLine, 100, m_FilePointer);
    break;
    >
    >

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

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

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

    if(ch == ' ') // Если только пробел - далее идёт только иняормация о вершинах ("v")
    <
    // Читаем вершину. Формат: "v x y z"
    fscanf(m_FilePointer, "%f %f %f", &vNewVertex.x, &vNewVertex.y, &vNewVertex.z);

    // Читаем остальную линию, чтобы перейти к следующей
    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);
    >
    >

    void CLoadObj::ReadFaceInfo()
    <
    tFace newFace = <0>;
    char strLine[255] = <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[0], &newFace.coordIndex[0],
    &newFace.vertIndex[1], &newFace.coordIndex[1],
    &newFace.vertIndex[2], &newFace.coordIndex[2]);
    >
    else // если обьект НЕ содержит текстурных координат
    <
    // Читаем только индексы вершин
    fscanf(m_FilePointer, "%d %d %d", &newFace.vertIndex[0],
    &newFace.vertIndex[1],
    &newFace.vertIndex[2]);
    >

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

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

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

    Войдите, чтобы оставить комментарий:

    Obj - это

    Obj это:

    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) is a geometry definition file format first developed by Wavefront Technologies for its Advanced Visualizer animation package. The file format is open and has been adopted by other 3D graphics application vendors and can be… … Wikipedia

    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 (сокр. англ. object, «объект») многозначное сокращение. Означает несколько форматов и расширений файлов, в том числе. obj расширение объектных модулей у ряда компиляторов Wavefront OBJ формат файлов геометрии объекта, используется в … Википедия

    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 fur 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 geometrie 3D. Il a ete defini par la societe Wavefront Technologies dans le cadre du developpement de son logiciel d animation Advanced Visualizer. Ce format … Wikipedia en Francais

    OBJ — Objet 3D (format de fichier) OBJ est un format de fichier contenant la description d une geometrie 3D. Il a ete defini par la societe Wavefront Technologies dans le cadre du developpement de son logiciel d animation Advanced Visualizer. Ce format … Wikipedia en Francais

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

    OBJ – Найдено записей по данному формату файла — 3
    1. Формат файла - .OBJ . внутренний номер - 5811


    Описание на английском языке
    Intel Relocatable OBJect Module=compiler/assembler output

    Описание на русском языке
    Файлы формата obj (исторически в NASM они называются obj, а не omf), создаваемые MASMом и TASMом, обычно скармливаются 16-битным DOS-компоновщикам, на выходе которых получаются .EXE файлы. Этот формат используется также в OS/2. Формат obj предполагает расширение выходного файла по умолчанию .obj. obj не является исключительно 16-битным форматом: NASM полностью поддерживает 32-битные расширения этого формата. В частности, 32-битный obj формат используется Win32-компиляторами Borland, которые не применяют новый обектный формат win32 от Майкрософт. Формат obj не определяет специальных имен сегментов: вы можете называть ваши сегменты как угодно. Типичными именами сегментов obj формата обычно являются CODE, DATA и BSS.

    Приложение которое использует файл .OBJ
    Poser 5

    Посмотреть другие расширения начинающиеся на букву

    Как открыть фаил с расширением - quot; mtl - quot

    как открыть фаил с расширением &quot;mtl&quot;

    В общем, если я верно поняла, то на файл mtl я правильно делаю, что не обращаю внимания, когда просто использую модель в сцене с VRay.


    В общем правильно все поняли.

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


    А кто его знает зачем он уже нужен

    В основном почти все редакторы дружат с форматом 3ds. Скорее всего для совместимости. если вдруг при импорте в другом редакторе возникнут какие либо проблемы с сеткой в 3ds, можно попробовать obj+mtl. Как всегда - чтоб был выбор !

    Откуда он берется. ))) Да так же как дети. Вы - мама 3ds max - папа

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

    В конечном итоге получите два файла obj - с сохраненной моделью колобка и mtl - с сохраненными настройками материалов и прописанными путями к текстурам.

    Ну и после того как запустите тот же блендер в нем жмете импорт из obj и все.

    А mtl подцепиться автоматически, т.е. с ним вообще ни чего делать не надо. главное чтоб лежал в одной папке с obj.

    Как открыть OBJ файлы - Файлы с расширением OBJ

    Что обозначает расширение OBJ?

    автор: Jay Geater. главный писатель по вопросам технологий

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

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

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

    Ответ:

    Файлы OBJ имеют Файлы данных, который преимущественно ассоциирован с Relocatable Object Code.

    Файлы OBJ также ассоциированы с WaveFront 3D Object, Hyperion-CADRazor 3D Model (TITAN Algorithms), UVMapper Object (Stephen L Cox), Metatools Object Bryce Support File, LightWave 3D Object (NewTek), Blender 3D Object (The Blender Foundation) и FileViewPro.

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

    Как открыть ваш файл OBJ: OBJ Средство открытия файлов

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

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

    Если ваш ПК открывает файл OBJ, но в неверной программе, вам потребуется изменить настройки ассоциации файлов в вашем реестре Windows. Другими словами, Windows ассоциирует расширения файлов OBJ с неверной программой.

    Мы настоятельно рекомендуем просканировать ваш реестр Windows на предмет неверных ассоциаций файлов и прочих проблем, связанных с реестром.

    Загрузки программного обеспечения, связанные с расширением файла OBJ:

    * Некоторые форматы расширений файлов OBJ можно открыть только в двоичном формате.

    OBJ Multipurpose Internet Mail Extensions (MIME): OBJ Инструмент анализа файлов™

    Вы не уверены, какой тип у файла OBJ? Хотите получить точную информацию о файле, его создателе и как его можно открыть?

    Теперь можно мгновенно получить всю необходимую информацию о файле OBJ!

    Революционный OBJ Инструмент анализа файлов™ сканирует, анализирует и сообщает подробную информацию о файле OBJ. Наш алгоритм (ожидается выдача патента) быстро проанализирует файл и через несколько секунд предоставит подробную информацию в наглядном и легко читаемом формате.†

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

    Чтобы начать бесплатный анализ файла, просто перетащите ваш файл OBJ внутрь пунктирной линии ниже или нажмите «Просмотреть мой компьютер» и выберите файл. Отчет об анализе файла OBJ будет показан внизу, прямо в окне браузера.

    Перетащите файл OBJ сюда для начала анализа

    Просмотреть мой компьютер »

    Пожалуйста, также проверьте мой файл на вирусы

    Solvusoft: Золотой сертификат Microsoft Компания Solvusoft имеет репутацию лучшего в своем классе независимого поставщика программного обеспечения,

    и признается корпорацией Microsoft в качестве ведущего независимого поставщика программного обеспечения, с высшим уровнем компетенции и качества. Близкие взаимоотношения компании Solvusoft с корпорацией Microsoft в качестве золотого партнера позволяют нам предлагать лучшие в своем классе решения, оптимизированные для работы с операционной системой Windows.

    Как достигается золотой уровень компетенции?

    Чтобы обеспечивать золотой уровень компетенции, компания Solvusoft производит независимый анализ,добиваясь высокого уровня опыта в работе с программным обеспечением, успешного обслуживания клиентов и первоклассной потребительской ценности. В качестве независимого разработчика ПО Solvusoft обеспечивает высочайший уровень удовлетворенности клиентов, предлагая программное обеспечение высшего класса и сервисные решения, постоянно проходящие строгие проверку и отбор со стороны корпорации Microsoft.

    НАЖМИТЕ для верификации статуса Solvusoft как золотого партнера корпорации Microsoft на сайте Microsoft Pinpoint >>

    Расширение файла OBJ

    OBJ – 3D объектный файл (3D Object File) Расширение 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

      Добавить комментарий.

    Урок 8

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

    Форматы мешей

    Загрузка внешних 3d моделей, — мешей — необходимая часть любого 3d приложения. В основном, каждое приложение, в частности, много игр поддерживают свои собственные форматы мешей. В основном, уникальность формата меша определяется уникальностью движка игры. Как правило, у каждого движка игры существуют свои собственный формат мешей. В нашем текущем уроке мы разберем два формата – формат .x и формат .obj.

    Данные, экспортируемые при экспорте меша из 3d редактора

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

    • координаты вершин
    • индексы полигонов
    • нормали
    • материалы

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

    Правильный экспорт мешей

    Существует пара простых правил для хорошего экспорта меша из редактора.

    • Всему мешу целиком назначайте в редакторе один материал и одну текстуру. Используйте для всего меша не больше одной текстуры и не больше одного материала.
    • Если функция загрузки мешей по каким-то причинам в вашей программе не подхватывает автоматическую загрузку текстуры, имя которой прописано в материале, или при экспорте меша вообще не экспортируется материал, загружайте ваши меши функцией наподобие loadmesh(“mesh.x”,”texture.jpg”); то есть, указывайте в функции загрузки меша отдельно имя текстуры. Или же загружайте отдельно, сначала меш, а затем текстуру к нему.
    • Если после загрузки меша меш отображается очень темным, то попробуйте осуществить либо в редакторе либо в функции загрузке меша операцию flipnormals, то есть обращение нормалей.
    • Если после загрузки меша в вашей программе этот меш отображается в виде маленькой точки или не виден совсем, значит подберите его масштаб при экспорте из редактора – либо увеличьте меш, чтобы он стал больше чем точка, либо уменьшите его, чтобы он поместился на экран и стал виден.

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

    Загрузка и меша из формата .x

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

    Загрузка меша из формата .x в DirectX11 имеет некоторые не очень хорошие особенности. В целом, загрузка меша и его вывод в функции Render осуществляется несложно, однако, чтобы вся функция в целом заработала правильно, необходимо в вашей программе подключить библиотеку DXUT. Подключение этой библиотеки к вашему Direct3D11 приложению это довольно некорректный способ программирования, так как вы подключите огромное количество потенциально ненужного кода, кроме того, нет никаких гарантий что этот код будет правильно работать и функционировать вообще. Внимательно ознакомившись с примером из папки XformatLoading вы поймете, о чем здесь речь.

    Внутри же DirectX11, в отличие от предыдущих версий не существует собственной функции загрузки мешей из формата .x. Разработчик DirectX, объясняет отсутствие такой функции в DirectX11 тем, что большинство компаний, занимающихся разработкой игр, имеют собственные форматы для хранения моделей. Таким образом сам формат .x поддерживается в текущих версиях DirectX весьма и весьма ограниченно, можно сказать, он не поддерживается совсем. Так как в DirectX11 формат .x не поддерживается, то в этом уроке по загрузке мешей мы будем использовать формат .obj.

    Загрузка меша из формата .obj

    Загрузив меш самостоятельно при помощи собственного загрузчика из формата .obj имеет много преимуществ перед загрузкой меша из формата .x. Вы можете получить полный контроль над процессом загрузки и рендера меша.

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

    Разберем формат файла obj. Каждая строка начинается с идентификационного символа. Комментарии # не учитываются. Символы бывают следующие: v, vt, vn, f. Эти символы нам понадобятся больше всего. Символ v обозначает вершину. После этого символа в строке идут координаты этой вершины. Символ vt обозначает текстурные координаты. Так как текстурные координаты имеют только u и v координаты, то третья цифра для них будет всегда равна нулю. Символ vn обозначает нормаль.

    При загрузке в программу каждой строке, начинающейся с идентификационного символа v, vt или vn присваивается индекс, так, как если бы сам файл содержал индексы каждой строки, таким образом:

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

    Каждая тройка чисел в строке f формата obj обозначает следующие: номер вершины v, номер координаты текстуры vt, и номер нормали vn и так три раза. Также обратите внимание, что вершин(8) в нашем примере меньше чем текстурных координат к ним (12). Конечно же для DirectX равенство количества вершин и текстурных координат должно соблюдаться. Таким образом, формат obj содержит только условно дамп индексного буфера. На самом деле, требуется определенный алгоритм, чтобы преобразовать данные из obj в настоящий вершинный и индексный буфер.

    Этот алгоритм следующий: Возьмем первые три цифры из первой строки f. Это индексы 1/10/1. Соответственно, возьмем первую строку v, десятую строку vt и первую строку vn.

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

    У нас существует временный массив для вершинного буфера vertices. Добавим данные вершины 1/10/1 в этот массив. Номер этой вершины массива vertices будет равен 0, так как она первая.

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

    Код загрузки данных из формата obj

    Алгоритм, описанный выше реализован программно. Вы можете его найти в исходном тексте meshobj.cpp, данный код содержится в методе MeshFromObj::LoadMeshFromObj. Обратите внимание, что перед тем как осуществить проход формата obj создается три временных буфера для хранения массивов v, vt и vn соответственно.

    Данный код существует в виде метода объекта MeshFromObj и является частью модуляmeshobj.h. Для того, чтобы использовать объект MeshFromObj и при помощи него загружать данные из внешних мешей необходимо подключить к вашему Direct3D приложению модуль meshobj.h.

    Загрузка и отображение меша при помощи модуля meshobj

    Модуль meshobj.h имеет функцию загрузки и рендера меша, загружаемого из файла obj. Сначала подключите этот модуль к вашему Direct3D приложению:

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