4

assimp を使用して、ゲーム エンジンに 3D モデルをインポートしています。何らかの理由で、使用するモデルまたはモデル形式に関係なく、assimp はテクスチャをまったく報告しません。どうしてこれなの?

以下は、assimp を使用した非常に単純なセットアップです。

const aiScene* scene = importer.ReadFile(asset, aiProcessPreset_TargetRealtime_Quality);

if (scene->HasMaterials())
        {
            for (unsigned int i = 0; i < scene->mNumMaterials; i++)
            {
                const aiMaterial* material = scene->mMaterials[i];
                aiString texturePath;

                unsigned int numTextures= material->GetTextureCount(aiTextureType_DIFFUSE);   // always 0

                if (material->GetTextureCount(aiTextureType_DIFFUSE) > 0 && material->GetTexture(aiTextureType_DIFFUSE, 0, &texturePath) == AI_SUCCESS) 
                {
                   // never happens..
                   // scene->mNumTextures is always 0 aswell.
                }
            }
        }

私は、assimp を使用してテクスチャ モデルをロードするという非常に特定の理由のために設計されたチュートリアルのモデルなど、テクスチャがあると確信しているさまざまなモデルを使用しています。(例: http://www.lighthouse3d.com/cg-topics/code-samples/importing-3d-models-with-assimp )

この理由は何でしょうか?

4

3 に答える 3

1

Matt がマテリアル ファイルが有効であると述べたことから続けて、マテリアルがロードされないという別の問題とその解決策を見つけました。

obj ファイルには、マテリアル ファイルとそのファイル内のマテリアル名への参照があります。ファイルの名前を変更した場合、これらは一致せず、マテリアルが見つかりません。

obj ファイルには、次のような行があります。

mtllib deer-obj.mtl

素材ファイルの名前です。マテリアルの名前を変更した場合は、ここでも名前を変更する必要があります。

同じファイルで、マテリアル ファイルで定義されているマテリアルの名前への参照が次のように見つかります。

usemtl deer

これは、マテリアル ファイル内のマテリアルの名前と一致する必要があります。mtl ファイルには、次のように定義されています。

newmtl deer

素材を見つけるには、「usemtl」名と「newmtl」名が一致する必要があります。

于 2016-03-21T10:53:08.493 に答える