Форум программистов, компьютерный форум CyberForum.ru

Отображение файла формата .fbx - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Можно ли сдавать ОГЭ по информатике (последнее задание) на C++? http://www.cyberforum.ru/cpp/thread1804926.html
Можно ли сдавать ОГЭ по информатике (последнее задание) на C++? Там нужно будет писать на компе в блокноте, в консоле или ручкой на листике? Можно ли подключать заголовочники (iostream, cstdio, cstdlib, string.h)?
C++ Шаблоны функци в классе Создал следующий шаблон функции: #include <iostream> using namespace std; template<int N> int fibonacci(){ return fibonacci<N-1>() + fibonacci<N-2>(); } template<> int fibonacci<1>(){ return 1; http://www.cyberforum.ru/cpp/thread1804626.html
C++ Специализации шаблона функции или перезагрузка
Доброго времени суток. Собственно, мою проблему можно увидеть в коде: #include <iostream> #include <vector> using namespace std; class A {}; vector<A*> List; class B : public A {
C++ NetBeans IDE 8.0.2
Здравствуйте. Где посмотреть и исправить указанные ошибки. mingw32-c++.exe: error: unrecognized command line option '-f' mingw32-c++.exe: error: CONF=Debug: No such file or directory
C++ Передача указателя на функцию-член http://www.cyberforum.ru/cpp/thread1799915.html
Всем привет ! Необходимо передать функцию-член в качестве параметра другой функции-члену. Следующий код class Menu { public: void spin(); }; void Menu::spin() {
C++ Замена четырехбитной комбинации на другую Имеется поток, перенесенный на GPU после преобразованный в битовый поток. Необходимо заменить 4 бита на другие (правила перехода записаны в блокноте, формат файла *.mdt),со сдвижкой после каждого преобразования на 1 бит(так как после этого произвожу проверку и ищу нужную синхрокомбинацию). Сделал ввод, перенос на видюху, перевод в биты, поиск синхры. Помогите не могу дойти никак до этого... подробнее

Показать сообщение отдельно
Warsmit
3 / 3 / 2
Регистрация: 13.05.2016
Сообщений: 36

Отображение файла формата .fbx - C++

09.09.2016, 10:06. Просмотров 379. Ответов 0
Метки (Все метки)

Здравствуйте,здесь мы будем мучать openGL, fbx sdk, ImageMagick, assimp.
В двух словах, как я думаю, у меня проблема с UV координатами.

Мне необходимо сделать программу для отображения .fbx файлов.
Файлы .fbx делаются в 3d max.

Текстуры мне предоставляются в .png, и на одном файле могут находиться текстуры для 10ти моделей.
Накладываясь на модели, но она должна растягиваться по UV координатам, а у меня текстуры копирует всю .png картинку на модель, и вместо загрузки на деталь одного куска текстуры из png у меня на текстуру натягиваются несколько полных копии этого png файла.

Как я дошёл до такого.

Я скачал FBX SDK, стырил ихний samples - ViewScene(из fbx sdk 2016)
Модель загружается корректно, но в примере используются текстуры только формата TGA, а мои файлы .fbx с png текстурами. Я подключил библиотеку ImageMagick, и смог загрузить текстуры png формата, но проблема в том, что слетела UV развёртка.
Результат на 1 картинке.
код загрузки файла с помощью ImageMagick

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
bool LoadTextureFromFile(const FbxString & pFilePath, unsigned int &pTextureObject)
{
    try
    {
        m_pImage = new Magick::Image((std::string)pFilePath);
        m_pImage->write(&m_blob, "RGB", 8);
    }
    catch (Magick::Error& Error)
    {
        //std::cout << "Error loading texture '" << pFilePath << "': " << Error.what() << std::endl;
        return false;
    }
 
    glGenTextures(1, &pTextureObject);
 
    glBindTexture(GL_TEXTURE_2D, pTextureObject);
 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_pImage->columns(), m_pImage->rows(), 0, GL_RGB, GL_UNSIGNED_BYTE, m_blob.data());
 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
 
    glGenerateMipmap(GL_TEXTURE_2D);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
 
    return true;
}


Помимо этого примера, я долго изучая гугл нашёл один ресурс.
На нём парень учит работать с openGL через шейдеры, всё на русском и подробно.
ссылка на уроки- http://triplepointfive.github.io/ogltutor/

у него я нашёл "Урок 22 - Загрузка моделей через Assimp"
http://triplepointfive.github.io/ogl...utorial22.html

я собрал данный пример, загрузил свой .fbx файл
модель не правильно загрузилась, но полазив в настройках и добавив в Assimp::Importer Importer настройку aiProcess_OptimizeMeshes я получил правильно загруженную модель(правда в одном месте, смотря сверху не загрузилась деталька модели, хотя если изнутри смотреть она есть, от отрисовывалась)

Но опять же, UV развёртки нету.
Результат на второй картинке.
код загрузки файла с помощью ImageMagick

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include "texture.h"
 
Texture::Texture(GLenum TextureTarget, const std::string& FileName)
{
    m_textureTarget = TextureTarget;
    m_fileName      = FileName;
    m_pImage        = NULL;
}
 
bool Texture::Load()
{
    try 
    {
        m_pImage = new Magick::Image(m_fileName);
        m_pImage->write(&m_blob, "RGBA");
    }
    catch (Magick::Error& Error) 
    {
        std::cout << "Error loading texture '" << m_fileName << "': " << Error.what() << std::endl;
        return false;
    }
    std::cout << "m_textureTarget " << m_textureTarget << " m_textureObj " << m_textureObj << " filename " << m_fileName << "\nm_blob.data() " << m_blob.data() << " width " << m_pImage->columns() << " height " << m_pImage->rows() << std::endl;
    glGenTextures(1, &m_textureObj);
    glBindTexture(m_textureTarget, m_textureObj);
    glTexImage2D(m_textureTarget, 0, GL_RGBA, m_pImage->columns(), m_pImage->rows(), 0, GL_RGBA, GL_UNSIGNED_BYTE, m_blob.data());
 
    glTexParameteri(m_textureTarget, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(m_textureTarget, GL_TEXTURE_WRAP_T, GL_REPEAT);
 
    glTexParameteri(m_textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(m_textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 
 
    return true;
}
 
void Texture::Bind(GLenum TextureUnit)
{
    glActiveTexture(TextureUnit);
    glBindTexture(m_textureTarget, m_textureObj);
}


Я очень рассчитываю на вашу помощь я уже потратил много времени на эту проблему.
Миниатюры
Отображение файла формата .fbx   Отображение файла формата .fbx  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru