|
@@ -452,24 +452,32 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) {
|
|
|
}
|
|
|
|
|
|
if (attr.normal.size() > 0 && attr.normal[0]) {
|
|
|
- attr.normal[0]->ExtractData(aim->mNormals);
|
|
|
+ if (attr.normal[0]->count != aim->mNumVertices) {
|
|
|
+ DefaultLogger::get()->warn("Normal count in mesh \"" + mesh.name + "\" does not match the vertex count");
|
|
|
+ } else {
|
|
|
+ attr.normal[0]->ExtractData(aim->mNormals);
|
|
|
|
|
|
- // only extract tangents if normals are present
|
|
|
- if (attr.tangent.size() > 0 && attr.tangent[0]) {
|
|
|
- // generate bitangents from normals and tangents according to spec
|
|
|
- Tangent *tangents = nullptr;
|
|
|
+ // only extract tangents if normals are present
|
|
|
+ if (attr.tangent.size() > 0 && attr.tangent[0]) {
|
|
|
+ if (attr.tangent[0]->count != aim->mNumVertices) {
|
|
|
+ DefaultLogger::get()->warn("Tangent count in mesh \"" + mesh.name + "\" does not match the vertex count");
|
|
|
+ } else {
|
|
|
+ // generate bitangents from normals and tangents according to spec
|
|
|
+ Tangent *tangents = nullptr;
|
|
|
|
|
|
- attr.tangent[0]->ExtractData(tangents);
|
|
|
+ attr.tangent[0]->ExtractData(tangents);
|
|
|
|
|
|
- aim->mTangents = new aiVector3D[aim->mNumVertices];
|
|
|
- aim->mBitangents = new aiVector3D[aim->mNumVertices];
|
|
|
+ aim->mTangents = new aiVector3D[aim->mNumVertices];
|
|
|
+ aim->mBitangents = new aiVector3D[aim->mNumVertices];
|
|
|
|
|
|
- for (unsigned int i = 0; i < aim->mNumVertices; ++i) {
|
|
|
- aim->mTangents[i] = tangents[i].xyz;
|
|
|
- aim->mBitangents[i] = (aim->mNormals[i] ^ tangents[i].xyz) * tangents[i].w;
|
|
|
- }
|
|
|
+ for (unsigned int i = 0; i < aim->mNumVertices; ++i) {
|
|
|
+ aim->mTangents[i] = tangents[i].xyz;
|
|
|
+ aim->mBitangents[i] = (aim->mNormals[i] ^ tangents[i].xyz) * tangents[i].w;
|
|
|
+ }
|
|
|
|
|
|
- delete[] tangents;
|
|
|
+ delete[] tangents;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|