diff --git a/code/AssetLib/USD/USDLoaderImplTinyusdz.cpp b/code/AssetLib/USD/USDLoaderImplTinyusdz.cpp index bef14b1ef..7468b4240 100644 --- a/code/AssetLib/USD/USDLoaderImplTinyusdz.cpp +++ b/code/AssetLib/USD/USDLoaderImplTinyusdz.cpp @@ -106,6 +106,7 @@ void USDImporterImplTinyusdz::InternReadFile( pScene->mMeshes[i] = new aiMesh(); verticesForMesh(render_scene, pScene, i); facesForMesh(render_scene, pScene, i); + uvsForMesh(render_scene, pScene, i); pScene->mRootNode->mMeshes[i] = static_cast(i); } } @@ -141,6 +142,22 @@ void USDImporterImplTinyusdz::facesForMesh( } } +void USDImporterImplTinyusdz::uvsForMesh( + const tinyusdz::tydra::RenderScene &render_scene, + aiScene *pScene, + size_t meshIdx) { + if (render_scene.meshes[meshIdx].facevaryingTexcoords.size() < 1) { + return; + } + const auto uvsForSlot0 = render_scene.meshes[meshIdx].facevaryingTexcoords.at(0); + if (render_scene.meshes[meshIdx].points.size() != uvsForSlot0.size()) { + return; + } + pScene->mMeshes[meshIdx]->mTextureCoords[0] = new aiVector3D[pScene->mMeshes[meshIdx]->mNumVertices]; + for (size_t j = 0; j < pScene->mMeshes[meshIdx]->mNumVertices; ++j) { + pScene->mMeshes[meshIdx]->mTextureCoords[0][j].x = uvsForSlot0[j][0]; + pScene->mMeshes[meshIdx]->mTextureCoords[0][j].y = uvsForSlot0[j][1]; + } } // namespace Assimp #endif // !! ASSIMP_BUILD_NO_USD_IMPORTER diff --git a/code/AssetLib/USD/USDLoaderImplTinyusdz.h b/code/AssetLib/USD/USDLoaderImplTinyusdz.h index 12bea6886..e71c5c7a0 100644 --- a/code/AssetLib/USD/USDLoaderImplTinyusdz.h +++ b/code/AssetLib/USD/USDLoaderImplTinyusdz.h @@ -72,6 +72,11 @@ public: const tinyusdz::tydra::RenderScene &render_scene, aiScene *pScene, size_t meshIdx); + + void uvsForMesh( + const tinyusdz::tydra::RenderScene &render_scene, + aiScene *pScene, + size_t meshIdx); }; } // namespace Assimp #endif // AI_USDLOADER_IMPL_TINYUSDZ_H_INCLUDED