Merge pull request #6025 from sethalves/fix-obj-model-meshes

This commit is contained in:
samcake 2015-10-08 11:57:26 -07:00
commit 01d39bd614
4 changed files with 14 additions and 12 deletions

View file

@ -1512,7 +1512,7 @@ FBXGeometry* FBXReader::extractFBXGeometry(const QVariantHash& mapping, const QS
} }
extracted.mesh.isEye = (maxJointIndex == geometry.leftEyeJointIndex || maxJointIndex == geometry.rightEyeJointIndex); extracted.mesh.isEye = (maxJointIndex == geometry.leftEyeJointIndex || maxJointIndex == geometry.rightEyeJointIndex);
buildModelMesh(extracted, url); buildModelMesh(extracted.mesh, url);
if (extracted.mesh.isEye) { if (extracted.mesh.isEye) {
if (maxJointIndex == geometry.leftEyeJointIndex) { if (maxJointIndex == geometry.leftEyeJointIndex) {

View file

@ -388,7 +388,7 @@ public:
ExtractedMesh extractMesh(const FBXNode& object, unsigned int& meshIndex); ExtractedMesh extractMesh(const FBXNode& object, unsigned int& meshIndex);
QHash<QString, ExtractedMesh> meshes; QHash<QString, ExtractedMesh> meshes;
void buildModelMesh(ExtractedMesh& extracted, const QString& url); static void buildModelMesh(FBXMesh& extractedMesh, const QString& url);
FBXTexture getTexture(const QString& textureID); FBXTexture getTexture(const QString& textureID);

View file

@ -386,11 +386,11 @@ ExtractedMesh FBXReader::extractMesh(const FBXNode& object, unsigned int& meshIn
return data.extracted; 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 -- .*"); static QString repeatedMessage = LogHandler::getInstance().addRepeatedMessageRegex("buildModelMesh failed -- .*");
unsigned int totalSourceIndices = 0; unsigned int totalSourceIndices = 0;
foreach(const FBXMeshPart& part, extracted.mesh.parts) { foreach(const FBXMeshPart& part, extractedMesh.parts) {
totalSourceIndices += (part.quadTrianglesIndices.size() + part.triangleIndices.size()); totalSourceIndices += (part.quadTrianglesIndices.size() + part.triangleIndices.size());
} }
@ -399,18 +399,18 @@ void FBXReader::buildModelMesh(ExtractedMesh& extracted, const QString& url) {
return; return;
} }
if (extracted.mesh.vertices.size() == 0) { if (extractedMesh.vertices.size() == 0) {
qCDebug(modelformat) << "buildModelMesh failed -- no vertices, url = " << url; qCDebug(modelformat) << "buildModelMesh failed -- no vertices, url = " << url;
return; return;
} }
FBXMesh& fbxMesh = extracted.mesh; FBXMesh& fbxMesh = extractedMesh;
model::MeshPointer mesh(new model::Mesh()); model::MeshPointer mesh(new model::Mesh());
// Grab the vertices in a buffer // Grab the vertices in a buffer
auto vb = std::make_shared<gpu::Buffer>(); auto vb = std::make_shared<gpu::Buffer>();
vb->setData(extracted.mesh.vertices.size() * sizeof(glm::vec3), vb->setData(extractedMesh.vertices.size() * sizeof(glm::vec3),
(const gpu::Byte*) extracted.mesh.vertices.data()); (const gpu::Byte*) extractedMesh.vertices.data());
gpu::BufferView vbv(vb, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ)); gpu::BufferView vbv(vb, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ));
mesh->setVertexBuffer(vbv); mesh->setVertexBuffer(vbv);
@ -486,7 +486,7 @@ void FBXReader::buildModelMesh(ExtractedMesh& extracted, const QString& url) {
unsigned int totalIndices = 0; unsigned int totalIndices = 0;
foreach(const FBXMeshPart& part, extracted.mesh.parts) { foreach(const FBXMeshPart& part, extractedMesh.parts) {
totalIndices += (part.quadTrianglesIndices.size() + part.triangleIndices.size()); totalIndices += (part.quadTrianglesIndices.size() + part.triangleIndices.size());
} }
@ -502,10 +502,10 @@ void FBXReader::buildModelMesh(ExtractedMesh& extracted, const QString& url) {
int offset = 0; int offset = 0;
std::vector< model::Mesh::Part > parts; std::vector< model::Mesh::Part > parts;
if (extracted.mesh.parts.size() > 1) { if (extractedMesh.parts.size() > 1) {
indexNum = 0; 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); model::Mesh::Part modelPart(indexNum, 0, 0, model::Mesh::TRIANGLES);
if (part.quadTrianglesIndices.size()) { if (part.quadTrianglesIndices.size()) {
@ -545,5 +545,5 @@ void FBXReader::buildModelMesh(ExtractedMesh& extracted, const QString& url) {
// model::Box box = // model::Box box =
mesh->evalPartBound(0); mesh->evalPartBound(0);
extracted.mesh._mesh = mesh; extractedMesh._mesh = mesh;
} }

View file

@ -532,6 +532,8 @@ FBXGeometry* OBJReader::readOBJ(QByteArray& model, const QVariantHash& mapping,
mesh.meshExtents.addPoint(vertex); mesh.meshExtents.addPoint(vertex);
geometry.meshExtents.addPoint(vertex); geometry.meshExtents.addPoint(vertex);
} }
FBXReader::buildModelMesh(mesh, url.toString());
// fbxDebugDump(geometry); // fbxDebugDump(geometry);
} catch(const std::exception& e) { } catch(const std::exception& e) {
qCDebug(modelformat) << "OBJ reader fail: " << e.what(); qCDebug(modelformat) << "OBJ reader fail: " << e.what();