From 3db148f3dcbd5882877dc924a793f03414783f70 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 8 Oct 2015 11:13:52 -0700 Subject: [PATCH] fix obj model meshes --- libraries/fbx/src/FBXReader.cpp | 2 +- libraries/fbx/src/FBXReader.h | 2 +- libraries/fbx/src/FBXReader_Mesh.cpp | 20 ++++++++++---------- libraries/fbx/src/OBJReader.cpp | 2 ++ 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/libraries/fbx/src/FBXReader.cpp b/libraries/fbx/src/FBXReader.cpp index 4b3b3b0fea..ca9f126cba 100644 --- a/libraries/fbx/src/FBXReader.cpp +++ b/libraries/fbx/src/FBXReader.cpp @@ -1512,7 +1512,7 @@ FBXGeometry* FBXReader::extractFBXGeometry(const QVariantHash& mapping, const QS } extracted.mesh.isEye = (maxJointIndex == geometry.leftEyeJointIndex || maxJointIndex == geometry.rightEyeJointIndex); - buildModelMesh(extracted, url); + buildModelMesh(extracted.mesh, url); if (extracted.mesh.isEye) { if (maxJointIndex == geometry.leftEyeJointIndex) { diff --git a/libraries/fbx/src/FBXReader.h b/libraries/fbx/src/FBXReader.h index c0cbf5fb18..0af7b28136 100644 --- a/libraries/fbx/src/FBXReader.h +++ b/libraries/fbx/src/FBXReader.h @@ -388,7 +388,7 @@ public: ExtractedMesh extractMesh(const FBXNode& object, unsigned int& meshIndex); QHash meshes; - void buildModelMesh(ExtractedMesh& extracted, const QString& url); + static void buildModelMesh(FBXMesh& extractedMesh, const QString& url); FBXTexture getTexture(const QString& textureID); diff --git a/libraries/fbx/src/FBXReader_Mesh.cpp b/libraries/fbx/src/FBXReader_Mesh.cpp index 097862ef38..dbada15588 100644 --- a/libraries/fbx/src/FBXReader_Mesh.cpp +++ b/libraries/fbx/src/FBXReader_Mesh.cpp @@ -386,11 +386,11 @@ ExtractedMesh FBXReader::extractMesh(const FBXNode& object, unsigned int& meshIn return data.extracted; } -void FBXReader::buildModelMesh(ExtractedMesh& extracted, const QString& url) { +void FBXReader::buildModelMesh(FBXMesh& extractedMesh, const QString& url) { static QString repeatedMessage = LogHandler::getInstance().addRepeatedMessageRegex("buildModelMesh failed -- .*"); unsigned int totalSourceIndices = 0; - foreach(const FBXMeshPart& part, extracted.mesh.parts) { + foreach(const FBXMeshPart& part, extractedMesh.parts) { totalSourceIndices += (part.quadTrianglesIndices.size() + part.triangleIndices.size()); } @@ -399,18 +399,18 @@ void FBXReader::buildModelMesh(ExtractedMesh& extracted, const QString& url) { return; } - if (extracted.mesh.vertices.size() == 0) { + if (extractedMesh.vertices.size() == 0) { qCDebug(modelformat) << "buildModelMesh failed -- no vertices, url = " << url; return; } - FBXMesh& fbxMesh = extracted.mesh; + FBXMesh& fbxMesh = extractedMesh; model::MeshPointer mesh(new model::Mesh()); // Grab the vertices in a buffer auto vb = std::make_shared(); - vb->setData(extracted.mesh.vertices.size() * sizeof(glm::vec3), - (const gpu::Byte*) extracted.mesh.vertices.data()); + vb->setData(extractedMesh.vertices.size() * sizeof(glm::vec3), + (const gpu::Byte*) extractedMesh.vertices.data()); gpu::BufferView vbv(vb, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ)); mesh->setVertexBuffer(vbv); @@ -486,7 +486,7 @@ void FBXReader::buildModelMesh(ExtractedMesh& extracted, const QString& url) { unsigned int totalIndices = 0; - foreach(const FBXMeshPart& part, extracted.mesh.parts) { + foreach(const FBXMeshPart& part, extractedMesh.parts) { totalIndices += (part.quadTrianglesIndices.size() + part.triangleIndices.size()); } @@ -502,10 +502,10 @@ void FBXReader::buildModelMesh(ExtractedMesh& extracted, const QString& url) { int offset = 0; std::vector< model::Mesh::Part > parts; - if (extracted.mesh.parts.size() > 1) { + if (extractedMesh.parts.size() > 1) { indexNum = 0; } - foreach(const FBXMeshPart& part, extracted.mesh.parts) { + foreach(const FBXMeshPart& part, extractedMesh.parts) { model::Mesh::Part modelPart(indexNum, 0, 0, model::Mesh::TRIANGLES); if (part.quadTrianglesIndices.size()) { @@ -545,5 +545,5 @@ void FBXReader::buildModelMesh(ExtractedMesh& extracted, const QString& url) { // model::Box box = mesh->evalPartBound(0); - extracted.mesh._mesh = mesh; + extractedMesh._mesh = mesh; } diff --git a/libraries/fbx/src/OBJReader.cpp b/libraries/fbx/src/OBJReader.cpp index a9275e2d4a..835bb1a9b6 100644 --- a/libraries/fbx/src/OBJReader.cpp +++ b/libraries/fbx/src/OBJReader.cpp @@ -532,6 +532,8 @@ FBXGeometry* OBJReader::readOBJ(QByteArray& model, const QVariantHash& mapping, mesh.meshExtents.addPoint(vertex); geometry.meshExtents.addPoint(vertex); } + + FBXReader::buildModelMesh(mesh, url.toString()); // fbxDebugDump(geometry); } catch(const std::exception& e) { qCDebug(modelformat) << "OBJ reader fail: " << e.what();