Модель Assimp имеет текстуры, но не имеет координат текстуры

Я использую Assimp для загрузки 3D-моделей в свою программу. Пока все шло хорошо, за исключением того, что я наткнулся на объект Lightwave, который, кажется, не имеет смысла. Конечно, он хорошо отображается в Lightwave, но в Assimp нет координат текстуры, нет координат UV, но текстуры, которые в конечном итоге загружаются. Но это не помогает - они просто сидят в памяти и никогда не используются, потому что, как вы уже догадались, нет координат текстуры.

Я пока не нашел никаких полезных страниц Assimp по этому поводу. Другие модели загружаются нормально и правильно наложены на текстуры. Это проблема с Assimp?


person GraphicsMuncher    schedule 07.05.2013    source источник


Ответы (2)


Это происходит со всеми моделями Lightwave или только с этой? Правильно ли ваша программа отображает другие модели?

У меня также была та же проблема, что и у вас, когда я использовал assimp для чтения в файле OBJ (а не в файле данных Lightwave) и рендеринга этого в OpenGL. Мой рендерер был полностью скопирован из примера на сайте assimp. Я провел небольшое расследование в моем рендерере и обнаружил, что у меня нет кода для использования UV! Итак, я добавил

if( mesh->mTextureCoords[0] != NULL ) {
    glTexCoord2fv( &mesh->mTextureCoords[0][index].x );
}

прямо перед тем, где я рисую вершину, где

int index = face->mIndices[i];

и i - переменная управления циклом цикла for.

Проблема: код рендеринга, найденный на сайте assimp, не делает ничего полезного с UV-координатами. Вы должны добавить это в себя.

Надеюсь, еще не поздно помочь!

person DethRaid    schedule 05.07.2013
comment
У меня нет тонны моделей, но это происходит как минимум на одной. - person GraphicsMuncher; 09.07.2013

Есть 8 слотов координат текстуры ... каждый может быть заполнен другой текстурой или нет ... вам просто нужно проверить первую

сетка-> mTextureCoords [0]

преобразовать его в массив типа "const struct aiVector3D *" и пройти через индексы mTextureCoords [0] [t]

обратите внимание, что мы зацикливаем t и его 2d-массив

    for (t = 0; t < mesh->mNumVertices; ++t) {
        const struct aiVector3D* textureVec = &mesh->mTextureCoords[0][t];
        printf("tex (%f,%f,%f)", textureVec->x, textureVec->y, textureVec->z );
    }

Надеюсь, поможет! Я тоже здесь застрял! думая, что он не загружается ...

сейчас: текс (0.159871,0.410298,0.000000) текс (0,034839,0.369741,0.000000) текс (0,147435,0.506447,0.000000) текс (0,018893,0.493014,0.000000) текс (0,159871,0.602596,0.000000) текс (0,034839,0.616288,0.000000) текс (0,196806,0.695823,0.000000) текс (0,082196,0.735817,0.000000) текс (0,257118,0.783297,0.000000) текс (0,159520,0.847968,0.000000) текс (0,314932,0.833907,0.000000) текс (0,318555,0.981848,0.000000) текс ( 0.554152,0.373114,0.000000) текс (0,557998,0.677465,0.000000) текс (0,442610,0.703479,0.000000)

person Orbitus007    schedule 18.09.2016
comment
На самом деле это может быть мет- ›mNumUVComponents ... извините! - person Orbitus007; 18.09.2016