mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-06-05 01:01:07 +02:00
Merge pull request #6025 from sethalves/fix-obj-model-meshes
This commit is contained in:
commit
01d39bd614
4 changed files with 14 additions and 12 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue