From df5684c4375193108fb64d2eee748d1ddd8db18b Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Tue, 10 Sep 2019 11:00:36 -0700 Subject: [PATCH 01/10] Introduce hfm::Shape object --- libraries/hfm/src/hfm/HFM.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/libraries/hfm/src/hfm/HFM.h b/libraries/hfm/src/hfm/HFM.h index 484a10aa3b..291d0fd6e3 100644 --- a/libraries/hfm/src/hfm/HFM.h +++ b/libraries/hfm/src/hfm/HFM.h @@ -287,6 +287,21 @@ public: bool shouldInitCollisions() const { return _collisionsConfig.size() > 0; } }; +class ShapeTransform { + std::vector clusters; + Extents meshExtents; + Transform modelTransform; +}; + +// The lightweight model part description. +class Shape { +public: + uint32_t mesh; + uint32_t meshPart; + uint32_t material; + uint32_t shapeTransform; +}; + /// The runtime model format. class Model { public: @@ -297,6 +312,8 @@ public: QString author; QString applicationName; ///< the name of the application that generated the model + std::vector shapes; + QVector joints; QHash jointIndices; ///< 1-based, so as to more easily detect missing indices bool hasSkeletonJoints; From c4db6c78d8ec70ae4dfea3ff5f05773b308faf5c Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Tue, 10 Sep 2019 11:32:12 -0700 Subject: [PATCH 02/10] std::vector-ize meshes/mesh parts in hfm::Model --- libraries/fbx/src/FBXSerializer.cpp | 2 +- libraries/fbx/src/GLTFSerializer.cpp | 8 +++---- libraries/fbx/src/OBJSerializer.cpp | 24 +++++++++---------- libraries/hfm/src/hfm/HFM.cpp | 2 +- libraries/hfm/src/hfm/HFM.h | 6 ++--- .../model-baker/src/model-baker/Baker.cpp | 4 ++-- libraries/render-utils/src/Model.cpp | 16 ++++++------- 7 files changed, 31 insertions(+), 31 deletions(-) diff --git a/libraries/fbx/src/FBXSerializer.cpp b/libraries/fbx/src/FBXSerializer.cpp index f8339ddd31..de6ab545e5 100644 --- a/libraries/fbx/src/FBXSerializer.cpp +++ b/libraries/fbx/src/FBXSerializer.cpp @@ -1624,7 +1624,7 @@ HFMModel* FBXSerializer::extractHFMModel(const hifi::VariantHash& mapping, const } } - hfmModel.meshes.append(extracted.mesh); + hfmModel.meshes.push_back(extracted.mesh); int meshIndex = hfmModel.meshes.size() - 1; meshIDsToMeshIndices.insert(it.key(), meshIndex); } diff --git a/libraries/fbx/src/GLTFSerializer.cpp b/libraries/fbx/src/GLTFSerializer.cpp index dca9e9fefa..e42b516559 100755 --- a/libraries/fbx/src/GLTFSerializer.cpp +++ b/libraries/fbx/src/GLTFSerializer.cpp @@ -1018,7 +1018,7 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash& if (node.defined["mesh"]) { - hfmModel.meshes.append(HFMMesh()); + hfmModel.meshes.push_back(HFMMesh()); HFMMesh& mesh = hfmModel.meshes[hfmModel.meshes.size() - 1]; if (!hfmModel.hasSkeletonJoints) { HFMCluster cluster; @@ -2038,9 +2038,9 @@ void GLTFSerializer::hfmDebugDump(const HFMModel& hfmModel) { qCDebug(modelformat) << " jointIndices.size() =" << hfmModel.jointIndices.size(); qCDebug(modelformat) << " joints.count() =" << hfmModel.joints.count(); qCDebug(modelformat) << "---------------- Meshes ----------------"; - qCDebug(modelformat) << " meshes.count() =" << hfmModel.meshes.count(); + qCDebug(modelformat) << " meshes.count() =" << hfmModel.meshes.size(); qCDebug(modelformat) << " blendshapeChannelNames = " << hfmModel.blendshapeChannelNames; - foreach(HFMMesh mesh, hfmModel.meshes) { + for (const HFMMesh& mesh : hfmModel.meshes) { qCDebug(modelformat) << "\n"; qCDebug(modelformat) << " meshpointer =" << mesh._mesh.get(); qCDebug(modelformat) << " meshindex =" << mesh.meshIndex; @@ -2054,7 +2054,7 @@ void GLTFSerializer::hfmDebugDump(const HFMModel& hfmModel) { qCDebug(modelformat) << " clusterIndices.count() =" << mesh.clusterIndices.count(); qCDebug(modelformat) << " clusterWeights.count() =" << mesh.clusterWeights.count(); qCDebug(modelformat) << " modelTransform =" << mesh.modelTransform; - qCDebug(modelformat) << " parts.count() =" << mesh.parts.count(); + qCDebug(modelformat) << " parts.count() =" << mesh.parts.size(); qCDebug(modelformat) << "---------------- Meshes (blendshapes)--------"; foreach(HFMBlendshape bshape, mesh.blendshapes) { qCDebug(modelformat) << "\n"; diff --git a/libraries/fbx/src/OBJSerializer.cpp b/libraries/fbx/src/OBJSerializer.cpp index 416f343a47..5f60fe7927 100644 --- a/libraries/fbx/src/OBJSerializer.cpp +++ b/libraries/fbx/src/OBJSerializer.cpp @@ -492,8 +492,8 @@ bool OBJSerializer::parseOBJGroup(OBJTokenizer& tokenizer, const hifi::VariantHa float& scaleGuess, bool combineParts) { FaceGroup faces; HFMMesh& mesh = hfmModel.meshes[0]; - mesh.parts.append(HFMMeshPart()); - HFMMeshPart& meshPart = mesh.parts.last(); + mesh.parts.push_back(HFMMeshPart()); + HFMMeshPart& meshPart = mesh.parts.back(); bool sawG = false; bool result = true; int originalFaceCountForDebugging = 0; @@ -501,7 +501,7 @@ bool OBJSerializer::parseOBJGroup(OBJTokenizer& tokenizer, const hifi::VariantHa bool anyVertexColor { false }; int vertexCount { 0 }; - setMeshPartDefaults(meshPart, QString("dontknow") + QString::number(mesh.parts.count())); + setMeshPartDefaults(meshPart, QString("dontknow") + QString::number(mesh.parts.size())); while (true) { int tokenType = tokenizer.nextToken(); @@ -676,7 +676,7 @@ HFMModel::Pointer OBJSerializer::read(const hifi::ByteArray& data, const hifi::V _url = url; bool combineParts = mapping.value("combineParts").toBool(); hfmModel.meshExtents.reset(); - hfmModel.meshes.append(HFMMesh()); + hfmModel.meshes.push_back(HFMMesh()); try { // call parseOBJGroup as long as it's returning true. Each successful call will @@ -706,8 +706,8 @@ HFMModel::Pointer OBJSerializer::read(const hifi::ByteArray& data, const hifi::V mesh.clusters.append(cluster); QMap materialMeshIdMap; - QVector hfmMeshParts; - for (int i = 0, meshPartCount = 0; i < mesh.parts.count(); i++, meshPartCount++) { + std::vector hfmMeshParts; + for (uint32_t i = 0, meshPartCount = 0; i < (uint32_t)mesh.parts.size(); i++, meshPartCount++) { HFMMeshPart& meshPart = mesh.parts[i]; FaceGroup faceGroup = faceGroups[meshPartCount]; bool specifiesUV = false; @@ -718,8 +718,8 @@ HFMModel::Pointer OBJSerializer::read(const hifi::ByteArray& data, const hifi::V // Create a new HFMMesh for this material mapping. materialMeshIdMap.insert(face.materialName, materialMeshIdMap.count()); - hfmMeshParts.append(HFMMeshPart()); - HFMMeshPart& meshPartNew = hfmMeshParts.last(); + hfmMeshParts.push_back(HFMMeshPart()); + HFMMeshPart& meshPartNew = hfmMeshParts.back(); meshPartNew.quadIndices = QVector(meshPart.quadIndices); // Copy over quad indices [NOTE (trent/mittens, 4/3/17): Likely unnecessary since they go unused anyway]. meshPartNew.quadTrianglesIndices = QVector(meshPart.quadTrianglesIndices); // Copy over quad triangulated indices [NOTE (trent/mittens, 4/3/17): Likely unnecessary since they go unused anyway]. meshPartNew.triangleIndices = QVector(meshPart.triangleIndices); // Copy over triangle indices. @@ -752,9 +752,9 @@ HFMModel::Pointer OBJSerializer::read(const hifi::ByteArray& data, const hifi::V } // clean up old mesh parts. - int unmodifiedMeshPartCount = mesh.parts.count(); + int unmodifiedMeshPartCount = mesh.parts.size(); mesh.parts.clear(); - mesh.parts = QVector(hfmMeshParts); + mesh.parts = hfmMeshParts; for (int i = 0, meshPartCount = 0; i < unmodifiedMeshPartCount; i++, meshPartCount++) { FaceGroup faceGroup = faceGroups[meshPartCount]; @@ -1003,7 +1003,7 @@ void hfmDebugDump(const HFMModel& hfmModel) { qCDebug(modelformat) << "---------------- hfmModel ----------------"; qCDebug(modelformat) << " hasSkeletonJoints =" << hfmModel.hasSkeletonJoints; qCDebug(modelformat) << " offset =" << hfmModel.offset; - qCDebug(modelformat) << " meshes.count() =" << hfmModel.meshes.count(); + qCDebug(modelformat) << " meshes.count() =" << hfmModel.meshes.size(); foreach (HFMMesh mesh, hfmModel.meshes) { qCDebug(modelformat) << " vertices.count() =" << mesh.vertices.count(); qCDebug(modelformat) << " colors.count() =" << mesh.colors.count(); @@ -1021,7 +1021,7 @@ void hfmDebugDump(const HFMModel& hfmModel) { qCDebug(modelformat) << " clusterWeights.count() =" << mesh.clusterWeights.count(); qCDebug(modelformat) << " meshExtents =" << mesh.meshExtents; qCDebug(modelformat) << " modelTransform =" << mesh.modelTransform; - qCDebug(modelformat) << " parts.count() =" << mesh.parts.count(); + qCDebug(modelformat) << " parts.count() =" << mesh.parts.size(); foreach (HFMMeshPart meshPart, mesh.parts) { qCDebug(modelformat) << " quadIndices.count() =" << meshPart.quadIndices.count(); qCDebug(modelformat) << " triangleIndices.count() =" << meshPart.triangleIndices.count(); diff --git a/libraries/hfm/src/hfm/HFM.cpp b/libraries/hfm/src/hfm/HFM.cpp index 236445bfda..b297db4bcb 100644 --- a/libraries/hfm/src/hfm/HFM.cpp +++ b/libraries/hfm/src/hfm/HFM.cpp @@ -76,7 +76,7 @@ QStringList HFMModel::getJointNames() const { } bool HFMModel::hasBlendedMeshes() const { - if (!meshes.isEmpty()) { + if (!meshes.empty()) { foreach (const HFMMesh& mesh, meshes) { if (!mesh.blendshapes.isEmpty()) { return true; diff --git a/libraries/hfm/src/hfm/HFM.h b/libraries/hfm/src/hfm/HFM.h index 291d0fd6e3..fcbdd32150 100644 --- a/libraries/hfm/src/hfm/HFM.h +++ b/libraries/hfm/src/hfm/HFM.h @@ -228,7 +228,7 @@ public: class Mesh { public: - QVector parts; + std::vector parts; QVector vertices; QVector normals; @@ -314,11 +314,11 @@ public: std::vector shapes; + std::vector meshes; + QVector joints; QHash jointIndices; ///< 1-based, so as to more easily detect missing indices bool hasSkeletonJoints; - - QVector meshes; QVector scripts; QHash materials; diff --git a/libraries/model-baker/src/model-baker/Baker.cpp b/libraries/model-baker/src/model-baker/Baker.cpp index c896613df5..e1b2ff97cf 100644 --- a/libraries/model-baker/src/model-baker/Baker.cpp +++ b/libraries/model-baker/src/model-baker/Baker.cpp @@ -32,7 +32,7 @@ namespace baker { void run(const BakeContextPointer& context, const Input& input, Output& output) { const auto& hfmModelIn = input; - output.edit0() = hfmModelIn->meshes.toStdVector(); + output.edit0() = hfmModelIn->meshes; output.edit1() = hfmModelIn->originalURL; output.edit2() = hfmModelIn->meshIndicesToModelNames; auto& blendshapesPerMesh = output.edit3(); @@ -107,7 +107,7 @@ namespace baker { void run(const BakeContextPointer& context, const Input& input, Output& output) { auto hfmModelOut = input.get0(); - hfmModelOut->meshes = QVector::fromStdVector(input.get1()); + hfmModelOut->meshes = input.get1(); hfmModelOut->joints = QVector::fromStdVector(input.get2()); hfmModelOut->jointRotationOffsets = input.get3(); hfmModelOut->jointIndices = input.get4(); diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 74cf1ffa39..e4fefacb96 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -734,7 +734,7 @@ bool Model::replaceScriptableModelMeshPart(scriptable::ScriptableModelBasePointe for (int partID = 0; partID < numParts; partID++) { HFMMeshPart part; part.triangleIndices = buffer_helpers::bufferToVector(mesh._mesh->getIndexBuffer(), "part.triangleIndices"); - mesh.parts << part; + mesh.parts.push_back(part); } { foreach (const glm::vec3& vertex, mesh.vertices) { @@ -745,7 +745,7 @@ bool Model::replaceScriptableModelMeshPart(scriptable::ScriptableModelBasePointe mesh.meshExtents.maximum = glm::max(mesh.meshExtents.maximum, transformedVertex); } } - hfmModel.meshes << mesh; + hfmModel.meshes.push_back(mesh); } calculateTriangleSets(hfmModel); } @@ -762,9 +762,9 @@ scriptable::ScriptableModelBase Model::getScriptableModel() { } const HFMModel& hfmModel = getHFMModel(); - int numberOfMeshes = hfmModel.meshes.size(); + uint32_t numberOfMeshes = (uint32_t)hfmModel.meshes.size(); int shapeID = 0; - for (int i = 0; i < numberOfMeshes; i++) { + for (uint32_t i = 0; i < numberOfMeshes; i++) { const HFMMesh& hfmMesh = hfmModel.meshes.at(i); if (auto mesh = hfmMesh._mesh) { result.append(mesh); @@ -795,20 +795,20 @@ scriptable::ScriptableModelBase Model::getScriptableModel() { void Model::calculateTriangleSets(const HFMModel& hfmModel) { PROFILE_RANGE(render, __FUNCTION__); - int numberOfMeshes = hfmModel.meshes.size(); + uint32_t numberOfMeshes = (uint32_t)hfmModel.meshes.size(); _triangleSetsValid = true; _modelSpaceMeshTriangleSets.clear(); _modelSpaceMeshTriangleSets.resize(numberOfMeshes); - for (int i = 0; i < numberOfMeshes; i++) { + for (uint32_t i = 0; i < numberOfMeshes; i++) { const HFMMesh& mesh = hfmModel.meshes.at(i); - const int numberOfParts = mesh.parts.size(); + const uint32_t numberOfParts = mesh.parts.size(); auto& meshTriangleSets = _modelSpaceMeshTriangleSets[i]; meshTriangleSets.resize(numberOfParts); - for (int j = 0; j < numberOfParts; j++) { + for (uint32_t j = 0; j < numberOfParts; j++) { const HFMMeshPart& part = mesh.parts.at(j); auto& partTriangleSet = meshTriangleSets[j]; From b944db3e7904da8233c124ff0f3a0a1ecf55c3dd Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Wed, 11 Sep 2019 16:50:21 -0700 Subject: [PATCH 03/10] std::vector-ize joints and materials in hfm::Model --- interface/src/avatar/AvatarDoctor.cpp | 4 ++-- .../src/avatars-renderer/SkeletonModel.cpp | 2 +- libraries/baking/src/MaterialBaker.cpp | 2 +- libraries/baking/src/MaterialBaker.h | 2 +- libraries/baking/src/ModelBaker.cpp | 2 +- libraries/fbx/src/FBXSerializer.cpp | 9 ++++++--- libraries/fbx/src/GLTFSerializer.cpp | 6 +++--- libraries/fbx/src/OBJSerializer.cpp | 13 +++++++------ libraries/hfm/src/hfm/HFM.h | 4 ++-- libraries/model-baker/src/model-baker/Baker.cpp | 4 ++-- 10 files changed, 26 insertions(+), 22 deletions(-) diff --git a/interface/src/avatar/AvatarDoctor.cpp b/interface/src/avatar/AvatarDoctor.cpp index 01a40e89fd..a12b4dfcc0 100644 --- a/interface/src/avatar/AvatarDoctor.cpp +++ b/interface/src/avatar/AvatarDoctor.cpp @@ -99,12 +99,12 @@ void AvatarDoctor::startDiagnosing() { } // RIG - if (avatarModel.joints.isEmpty()) { + if (avatarModel.joints.empty()) { addError("Avatar has no rig.", "no-rig"); } else { auto jointNames = avatarModel.getJointNames(); - if (avatarModel.joints.length() > NETWORKED_JOINTS_LIMIT) { + if (avatarModel.joints.size() > NETWORKED_JOINTS_LIMIT) { addError(tr( "Avatar has over %n bones.", "", NETWORKED_JOINTS_LIMIT), "maximum-bone-limit"); } // Avatar does not have Hips bone mapped diff --git a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp index 40b65c54a1..d082d515fc 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp @@ -312,7 +312,7 @@ void SkeletonModel::computeBoundingShape() { } const HFMModel& hfmModel = getHFMModel(); - if (hfmModel.joints.isEmpty() || _rig.indexOfJoint("Hips") == -1) { + if (hfmModel.joints.empty() || _rig.indexOfJoint("Hips") == -1) { // rootJointIndex == -1 if the avatar model has no skeleton return; } diff --git a/libraries/baking/src/MaterialBaker.cpp b/libraries/baking/src/MaterialBaker.cpp index 9a1b1b2d24..d177ddf358 100644 --- a/libraries/baking/src/MaterialBaker.cpp +++ b/libraries/baking/src/MaterialBaker.cpp @@ -258,7 +258,7 @@ void MaterialBaker::addTexture(const QString& materialName, image::TextureUsage: } }; -void MaterialBaker::setMaterials(const QHash& materials, const QString& baseURL) { +void MaterialBaker::setMaterials(const std::vector& materials, const QString& baseURL) { _materialResource = NetworkMaterialResourcePointer(new NetworkMaterialResource(), [](NetworkMaterialResource* ptr) { ptr->deleteLater(); }); for (auto& material : materials) { _materialResource->parsedMaterials.names.push_back(material.name.toStdString()); diff --git a/libraries/baking/src/MaterialBaker.h b/libraries/baking/src/MaterialBaker.h index 04782443f0..bb47941af6 100644 --- a/libraries/baking/src/MaterialBaker.h +++ b/libraries/baking/src/MaterialBaker.h @@ -32,7 +32,7 @@ public: bool isURL() const { return _isURL; } QString getBakedMaterialData() const { return _bakedMaterialData; } - void setMaterials(const QHash& materials, const QString& baseURL); + void setMaterials(const std::vector& materials, const QString& baseURL); void setMaterials(const NetworkMaterialResourcePointer& materialResource); NetworkMaterialResourcePointer getNetworkMaterialResource() const { return _materialResource; } diff --git a/libraries/baking/src/ModelBaker.cpp b/libraries/baking/src/ModelBaker.cpp index 9d6a368e1c..38ebf6dfce 100644 --- a/libraries/baking/src/ModelBaker.cpp +++ b/libraries/baking/src/ModelBaker.cpp @@ -259,7 +259,7 @@ void ModelBaker::bakeSourceCopy() { return; } - if (!_hfmModel->materials.isEmpty()) { + if (!_hfmModel->materials.empty()) { _materialBaker = QSharedPointer( new MaterialBaker(_modelURL.fileName(), true, _bakedOutputDir), &MaterialBaker::deleteLater diff --git a/libraries/fbx/src/FBXSerializer.cpp b/libraries/fbx/src/FBXSerializer.cpp index de6ab545e5..81444f8c6b 100644 --- a/libraries/fbx/src/FBXSerializer.cpp +++ b/libraries/fbx/src/FBXSerializer.cpp @@ -1357,11 +1357,11 @@ HFMModel* FBXSerializer::extractHFMModel(const hifi::VariantHash& mapping, const } } - hfmModel.joints.append(joint); + hfmModel.joints.push_back(joint); } // NOTE: shapeVertices are in joint-frame - hfmModel.shapeVertices.resize(std::max(1, hfmModel.joints.size()) ); + hfmModel.shapeVertices.resize(std::max((size_t)1, hfmModel.joints.size()) ); hfmModel.bindExtents.reset(); hfmModel.meshExtents.reset(); @@ -1400,7 +1400,10 @@ HFMModel* FBXSerializer::extractHFMModel(const hifi::VariantHash& mapping, const } } #endif - hfmModel.materials = _hfmMaterials; + + for (auto materialIt = _hfmMaterials.cbegin(); materialIt != _hfmMaterials.cend(); ++materialIt) { + hfmModel.materials.push_back(materialIt.value()); + } // see if any materials have texture children bool materialsHaveTextures = checkMaterialsHaveTextures(_hfmMaterials, _textureFilenames, _connectionChildMap); diff --git a/libraries/fbx/src/GLTFSerializer.cpp b/libraries/fbx/src/GLTFSerializer.cpp index e42b516559..4c4050c935 100755 --- a/libraries/fbx/src/GLTFSerializer.cpp +++ b/libraries/fbx/src/GLTFSerializer.cpp @@ -1002,8 +1002,8 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash& for (int i = 0; i < materialIDs.size(); ++i) { QString& matid = materialIDs[i]; - hfmModel.materials[matid] = HFMMaterial(); - HFMMaterial& hfmMaterial = hfmModel.materials[matid]; + hfmModel.materials.emplace_back(); + HFMMaterial& hfmMaterial = hfmModel.materials.back(); hfmMaterial._material = std::make_shared(); hfmMaterial.name = hfmMaterial.materialID = matid; setHFMMaterial(hfmMaterial, _file.materials[i]); @@ -2036,7 +2036,7 @@ void GLTFSerializer::hfmDebugDump(const HFMModel& hfmModel) { qCDebug(modelformat) << " meshExtents.size() = " << hfmModel.meshExtents.size(); qCDebug(modelformat) << " jointIndices.size() =" << hfmModel.jointIndices.size(); - qCDebug(modelformat) << " joints.count() =" << hfmModel.joints.count(); + qCDebug(modelformat) << " joints.count() =" << hfmModel.joints.size(); qCDebug(modelformat) << "---------------- Meshes ----------------"; qCDebug(modelformat) << " meshes.count() =" << hfmModel.meshes.size(); qCDebug(modelformat) << " blendshapeChannelNames = " << hfmModel.blendshapeChannelNames; diff --git a/libraries/fbx/src/OBJSerializer.cpp b/libraries/fbx/src/OBJSerializer.cpp index 5f60fe7927..d6be066674 100644 --- a/libraries/fbx/src/OBJSerializer.cpp +++ b/libraries/fbx/src/OBJSerializer.cpp @@ -892,11 +892,12 @@ HFMModel::Pointer OBJSerializer::read(const hifi::ByteArray& data, const hifi::V continue; } - HFMMaterial& hfmMaterial = hfmModel.materials[materialID] = HFMMaterial(objMaterial.diffuseColor, - objMaterial.specularColor, - objMaterial.emissiveColor, - objMaterial.shininess, - objMaterial.opacity); + hfmModel.materials.emplace_back(objMaterial.diffuseColor, + objMaterial.specularColor, + objMaterial.emissiveColor, + objMaterial.shininess, + objMaterial.opacity); + HFMMaterial& hfmMaterial = hfmModel.materials.back(); hfmMaterial.name = materialID; hfmMaterial.materialID = materialID; @@ -1046,7 +1047,7 @@ void hfmDebugDump(const HFMModel& hfmModel) { } qCDebug(modelformat) << " jointIndices =" << hfmModel.jointIndices; - qCDebug(modelformat) << " joints.count() =" << hfmModel.joints.count(); + qCDebug(modelformat) << " joints.count() =" << hfmModel.joints.size(); foreach (HFMJoint joint, hfmModel.joints) { diff --git a/libraries/hfm/src/hfm/HFM.h b/libraries/hfm/src/hfm/HFM.h index fcbdd32150..b49e53ad4c 100644 --- a/libraries/hfm/src/hfm/HFM.h +++ b/libraries/hfm/src/hfm/HFM.h @@ -316,12 +316,12 @@ public: std::vector meshes; - QVector joints; + std::vector joints; QHash jointIndices; ///< 1-based, so as to more easily detect missing indices bool hasSkeletonJoints; QVector scripts; - QHash materials; + std::vector materials; glm::mat4 offset; // This includes offset, rotation, and scale as specified by the FST file diff --git a/libraries/model-baker/src/model-baker/Baker.cpp b/libraries/model-baker/src/model-baker/Baker.cpp index e1b2ff97cf..50221c4481 100644 --- a/libraries/model-baker/src/model-baker/Baker.cpp +++ b/libraries/model-baker/src/model-baker/Baker.cpp @@ -40,7 +40,7 @@ namespace baker { for (int i = 0; i < hfmModelIn->meshes.size(); i++) { blendshapesPerMesh.push_back(hfmModelIn->meshes[i].blendshapes.toStdVector()); } - output.edit4() = hfmModelIn->joints.toStdVector(); + output.edit4() = hfmModelIn->joints; } }; @@ -108,7 +108,7 @@ namespace baker { void run(const BakeContextPointer& context, const Input& input, Output& output) { auto hfmModelOut = input.get0(); hfmModelOut->meshes = input.get1(); - hfmModelOut->joints = QVector::fromStdVector(input.get2()); + hfmModelOut->joints = input.get2(); hfmModelOut->jointRotationOffsets = input.get3(); hfmModelOut->jointIndices = input.get4(); hfmModelOut->flowData = input.get5(); From ccdfb11de2e3ae33d3b563650cc0299034e89ad6 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Wed, 11 Sep 2019 16:56:29 -0700 Subject: [PATCH 04/10] Re-order hfm::Model variables and add shapeTransforms list --- libraries/hfm/src/hfm/HFM.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/hfm/src/hfm/HFM.h b/libraries/hfm/src/hfm/HFM.h index b49e53ad4c..33b02819d2 100644 --- a/libraries/hfm/src/hfm/HFM.h +++ b/libraries/hfm/src/hfm/HFM.h @@ -315,14 +315,14 @@ public: std::vector shapes; std::vector meshes; + std::vector materials; + std::vector shapeTransforms; std::vector joints; QHash jointIndices; ///< 1-based, so as to more easily detect missing indices bool hasSkeletonJoints; QVector scripts; - std::vector materials; - glm::mat4 offset; // This includes offset, rotation, and scale as specified by the FST file glm::vec3 neckPivot; From d948e434ddbbc0706cecc934a9bc0dbb1ac8bb27 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Fri, 13 Sep 2019 09:54:46 -0700 Subject: [PATCH 05/10] DyanamicTransform concept --- libraries/hfm/src/hfm/HFM.h | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/libraries/hfm/src/hfm/HFM.h b/libraries/hfm/src/hfm/HFM.h index 33b02819d2..959fc0dc28 100644 --- a/libraries/hfm/src/hfm/HFM.h +++ b/libraries/hfm/src/hfm/HFM.h @@ -287,10 +287,22 @@ public: bool shouldInitCollisions() const { return _collisionsConfig.size() > 0; } }; -class ShapeTransform { - std::vector clusters; - Extents meshExtents; - Transform modelTransform; +class TransformNode { + uint32_t parent { 0 }; + Transform transform; +}; + +// Formerly contained in hfm::Mesh +class Deformer { + std::vector indices; + std::vector weights; +}; + +class DynamicTransform { + std::vector deformers; + std::vector clusters; // affect the deformer of the same index + std::vector blendshapes; + // There is also the modelTransform, which for now is left in hfm::Mesh }; // The lightweight model part description. @@ -299,7 +311,8 @@ public: uint32_t mesh; uint32_t meshPart; uint32_t material; - uint32_t shapeTransform; + uint32_t transform; // The static transform node when not taking into account rigging/skinning + uint32_t dynamicTransform; }; /// The runtime model format. @@ -316,8 +329,9 @@ public: std::vector meshes; std::vector materials; - std::vector shapeTransforms; + std::vector deformers; + std::vector transforms; std::vector joints; QHash jointIndices; ///< 1-based, so as to more easily detect missing indices bool hasSkeletonJoints; From c765e1af39c4c8d21061e16184d33e2774895d71 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Fri, 13 Sep 2019 14:17:12 -0700 Subject: [PATCH 06/10] Add dynamicTransforms to hfm::Model --- libraries/hfm/src/hfm/HFM.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/hfm/src/hfm/HFM.h b/libraries/hfm/src/hfm/HFM.h index 959fc0dc28..e718a6d4ae 100644 --- a/libraries/hfm/src/hfm/HFM.h +++ b/libraries/hfm/src/hfm/HFM.h @@ -332,6 +332,8 @@ public: std::vector deformers; std::vector transforms; + std::vector dynamicTransforms; + std::vector joints; QHash jointIndices; ///< 1-based, so as to more easily detect missing indices bool hasSkeletonJoints; From b14593202ce9ba551a99425dc8e0f7b1c0ed768b Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Fri, 13 Sep 2019 14:23:15 -0700 Subject: [PATCH 07/10] Give hfm::Shape keys special undefined value --- libraries/hfm/src/hfm/HFM.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libraries/hfm/src/hfm/HFM.h b/libraries/hfm/src/hfm/HFM.h index e718a6d4ae..7a0516c04a 100644 --- a/libraries/hfm/src/hfm/HFM.h +++ b/libraries/hfm/src/hfm/HFM.h @@ -302,17 +302,19 @@ class DynamicTransform { std::vector deformers; std::vector clusters; // affect the deformer of the same index std::vector blendshapes; - // There is also the modelTransform, which for now is left in hfm::Mesh + // There are also the meshExtents and modelTransform, which for now are left in hfm::Mesh }; // The lightweight model part description. class Shape { public: - uint32_t mesh; - uint32_t meshPart; - uint32_t material; - uint32_t transform; // The static transform node when not taking into account rigging/skinning - uint32_t dynamicTransform; + const static uint32_t UNDEFINED_KEY { (uint32_t)-1 }; + + uint32_t mesh { UNDEFINED_KEY }; + uint32_t meshPart { UNDEFINED_KEY }; + uint32_t material { UNDEFINED_KEY }; + uint32_t transform { UNDEFINED_KEY }; // The static transform node when not taking into account rigging/skinning + uint32_t dynamicTransform { UNDEFINED_KEY }; }; /// The runtime model format. From a166b4121673d21695afe1d499cb2d608c1a1e75 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Fri, 13 Sep 2019 15:39:29 -0700 Subject: [PATCH 08/10] Fix build warnings/errors --- interface/src/raypick/CollisionPick.cpp | 4 +-- libraries/baking/src/FBXBaker.cpp | 6 ++--- libraries/baking/src/FBXBaker.h | 2 +- libraries/baking/src/OBJBaker.cpp | 25 +++++++++++-------- libraries/baking/src/OBJBaker.h | 2 +- .../src/RenderableModelEntityItem.cpp | 4 +-- .../RenderableParticleEffectEntityItem.cpp | 8 +++--- libraries/fbx/src/FBXSerializer.cpp | 6 ++--- libraries/fbx/src/FBXSerializer_Mesh.cpp | 4 +-- libraries/fbx/src/OBJSerializer.cpp | 4 +-- libraries/render-utils/src/Model.cpp | 2 +- 11 files changed, 35 insertions(+), 32 deletions(-) diff --git a/interface/src/raypick/CollisionPick.cpp b/interface/src/raypick/CollisionPick.cpp index 2602bdb0a0..fe943d5b84 100644 --- a/interface/src/raypick/CollisionPick.cpp +++ b/interface/src/raypick/CollisionPick.cpp @@ -248,9 +248,9 @@ void CollisionPick::computeShapeInfo(const CollisionRegion& pick, ShapeInfo& sha shapeInfo.setParams(type, dimensions, resource->getURL().toString()); } else if (type >= SHAPE_TYPE_SIMPLE_HULL && type <= SHAPE_TYPE_STATIC_MESH) { const HFMModel& hfmModel = resource->getHFMModel(); - int numHFMMeshes = hfmModel.meshes.size(); + uint32_t numHFMMeshes = (uint32_t)hfmModel.meshes.size(); int totalNumVertices = 0; - for (int i = 0; i < numHFMMeshes; i++) { + for (uint32_t i = 0; i < numHFMMeshes; i++) { const HFMMesh& mesh = hfmModel.meshes.at(i); totalNumVertices += mesh.vertices.size(); } diff --git a/libraries/baking/src/FBXBaker.cpp b/libraries/baking/src/FBXBaker.cpp index eb02ac2241..7f508dfe15 100644 --- a/libraries/baking/src/FBXBaker.cpp +++ b/libraries/baking/src/FBXBaker.cpp @@ -90,11 +90,11 @@ void FBXBaker::replaceMeshNodeWithDraco(FBXNode& meshNode, const QByteArray& dra } } -void FBXBaker::rewriteAndBakeSceneModels(const QVector& meshes, const std::vector& dracoMeshes, const std::vector>& dracoMaterialLists) { +void FBXBaker::rewriteAndBakeSceneModels(const std::vector& meshes, const std::vector& dracoMeshes, const std::vector>& dracoMaterialLists) { std::vector meshIndexToRuntimeOrder; - auto meshCount = (int)meshes.size(); + auto meshCount = (uint32_t)meshes.size(); meshIndexToRuntimeOrder.resize(meshCount); - for (int i = 0; i < meshCount; i++) { + for (uint32_t i = 0; i < meshCount; i++) { meshIndexToRuntimeOrder[meshes[i].meshIndex] = i; } diff --git a/libraries/baking/src/FBXBaker.h b/libraries/baking/src/FBXBaker.h index a528de512d..6ac05e36e9 100644 --- a/libraries/baking/src/FBXBaker.h +++ b/libraries/baking/src/FBXBaker.h @@ -33,7 +33,7 @@ protected: virtual void bakeProcessedSource(const hfm::Model::Pointer& hfmModel, const std::vector& dracoMeshes, const std::vector>& dracoMaterialLists) override; private: - void rewriteAndBakeSceneModels(const QVector& meshes, const std::vector& dracoMeshes, const std::vector>& dracoMaterialLists); + void rewriteAndBakeSceneModels(const std::vector& meshes, const std::vector& dracoMeshes, const std::vector>& dracoMaterialLists); void replaceMeshNodeWithDraco(FBXNode& meshNode, const QByteArray& dracoMeshBytes, const std::vector& dracoMaterialList); }; diff --git a/libraries/baking/src/OBJBaker.cpp b/libraries/baking/src/OBJBaker.cpp index a2d0ab1094..4adaa01845 100644 --- a/libraries/baking/src/OBJBaker.cpp +++ b/libraries/baking/src/OBJBaker.cpp @@ -106,11 +106,16 @@ void OBJBaker::createFBXNodeTree(FBXNode& rootNode, const hfm::Model::Pointer& h materialNode.name = MATERIAL_NODE_NAME; if (hfmModel->materials.size() == 1) { // case when no material information is provided, OBJSerializer considers it as a single default material - for (auto& materialID : hfmModel->materials.keys()) { - setMaterialNodeProperties(materialNode, materialID, hfmModel); + for (auto& material : hfmModel->materials) { + setMaterialNodeProperties(materialNode, material.name, material, hfmModel); } } else { - setMaterialNodeProperties(materialNode, meshPart.materialID, hfmModel); + for (auto& material : hfmModel->materials) { + if (material.name == meshPart.materialID) { + setMaterialNodeProperties(materialNode, meshPart.materialID, material, hfmModel); + break; + } + } } objectNode.children.append(materialNode); @@ -153,12 +158,10 @@ void OBJBaker::createFBXNodeTree(FBXNode& rootNode, const hfm::Model::Pointer& h } // Set properties for material nodes -void OBJBaker::setMaterialNodeProperties(FBXNode& materialNode, QString material, const hfm::Model::Pointer& hfmModel) { +void OBJBaker::setMaterialNodeProperties(FBXNode& materialNode, const QString& materialName, const hfm::Material& material, const hfm::Model::Pointer& hfmModel) { auto materialID = nextNodeID(); _materialIDs.push_back(materialID); - materialNode.properties = { materialID, material, MESH }; - - HFMMaterial currentMaterial = hfmModel->materials[material]; + materialNode.properties = { materialID, materialName, MESH }; // Setting the hierarchy: Material -> Properties70 -> P -> Properties FBXNode properties70Node; @@ -170,7 +173,7 @@ void OBJBaker::setMaterialNodeProperties(FBXNode& materialNode, QString material pNodeDiffuseColor.name = P_NODE_NAME; pNodeDiffuseColor.properties.append({ "DiffuseColor", "Color", "", "A", - currentMaterial.diffuseColor[0], currentMaterial.diffuseColor[1], currentMaterial.diffuseColor[2] + material.diffuseColor[0], material.diffuseColor[1], material.diffuseColor[2] }); } properties70Node.children.append(pNodeDiffuseColor); @@ -181,7 +184,7 @@ void OBJBaker::setMaterialNodeProperties(FBXNode& materialNode, QString material pNodeSpecularColor.name = P_NODE_NAME; pNodeSpecularColor.properties.append({ "SpecularColor", "Color", "", "A", - currentMaterial.specularColor[0], currentMaterial.specularColor[1], currentMaterial.specularColor[2] + material.specularColor[0], material.specularColor[1], material.specularColor[2] }); } properties70Node.children.append(pNodeSpecularColor); @@ -192,7 +195,7 @@ void OBJBaker::setMaterialNodeProperties(FBXNode& materialNode, QString material pNodeShininess.name = P_NODE_NAME; pNodeShininess.properties.append({ "Shininess", "Number", "", "A", - currentMaterial.shininess + material.shininess }); } properties70Node.children.append(pNodeShininess); @@ -203,7 +206,7 @@ void OBJBaker::setMaterialNodeProperties(FBXNode& materialNode, QString material pNodeOpacity.name = P_NODE_NAME; pNodeOpacity.properties.append({ "Opacity", "Number", "", "A", - currentMaterial.opacity + material.opacity }); } properties70Node.children.append(pNodeOpacity); diff --git a/libraries/baking/src/OBJBaker.h b/libraries/baking/src/OBJBaker.h index 9d0fe53e3c..044c51d0cc 100644 --- a/libraries/baking/src/OBJBaker.h +++ b/libraries/baking/src/OBJBaker.h @@ -28,7 +28,7 @@ protected: private: void createFBXNodeTree(FBXNode& rootNode, const hfm::Model::Pointer& hfmModel, const hifi::ByteArray& dracoMesh); - void setMaterialNodeProperties(FBXNode& materialNode, QString material, const hfm::Model::Pointer& hfmModel); + void setMaterialNodeProperties(FBXNode& materialNode, const QString& materialName, const hfm::Material& material, const hfm::Model::Pointer& hfmModel); NodeID nextNodeID() { return _nodeID++; } NodeID _nodeID { 0 }; diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 6314cc8ce4..7c9e8e5f13 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -473,11 +473,11 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) { // compute meshPart local transforms QVector localTransforms; const HFMModel& hfmModel = model->getHFMModel(); - int numHFMMeshes = hfmModel.meshes.size(); + uint32_t numHFMMeshes = (uint32_t)hfmModel.meshes.size(); int totalNumVertices = 0; glm::vec3 dimensions = getScaledDimensions(); glm::mat4 invRegistraionOffset = glm::translate(dimensions * (getRegistrationPoint() - ENTITY_ITEM_DEFAULT_REGISTRATION_POINT)); - for (int i = 0; i < numHFMMeshes; i++) { + for (uint32_t i = 0; i < numHFMMeshes; i++) { const HFMMesh& mesh = hfmModel.meshes.at(i); if (mesh.clusters.size() > 0) { const HFMCluster& cluster = mesh.clusters.at(0); diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index e3528e2291..a97cc7c84c 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -490,7 +490,7 @@ void ParticleEffectEntityRenderer::fetchGeometryResource() { void ParticleEffectEntityRenderer::computeTriangles(const hfm::Model& hfmModel) { PROFILE_RANGE(render, __FUNCTION__); - int numberOfMeshes = hfmModel.meshes.size(); + uint32_t numberOfMeshes = (uint32_t)hfmModel.meshes.size(); _hasComputedTriangles = true; _triangleInfo.triangles.clear(); @@ -500,11 +500,11 @@ void ParticleEffectEntityRenderer::computeTriangles(const hfm::Model& hfmModel) float minArea = FLT_MAX; AABox bounds; - for (int i = 0; i < numberOfMeshes; i++) { + for (uint32_t i = 0; i < numberOfMeshes; i++) { const HFMMesh& mesh = hfmModel.meshes.at(i); - const int numberOfParts = mesh.parts.size(); - for (int j = 0; j < numberOfParts; j++) { + const uint32_t numberOfParts = (uint32_t)mesh.parts.size(); + for (uint32_t j = 0; j < numberOfParts; j++) { const HFMMeshPart& part = mesh.parts.at(j); const int INDICES_PER_TRIANGLE = 3; diff --git a/libraries/fbx/src/FBXSerializer.cpp b/libraries/fbx/src/FBXSerializer.cpp index 81444f8c6b..f3c620c929 100644 --- a/libraries/fbx/src/FBXSerializer.cpp +++ b/libraries/fbx/src/FBXSerializer.cpp @@ -1288,7 +1288,7 @@ HFMModel* FBXSerializer::extractHFMModel(const hifi::VariantHash& mapping, const const FBXModel& fbxModel = fbxModels[modelID]; HFMJoint joint; joint.parentIndex = fbxModel.parentIndex; - int jointIndex = hfmModel.joints.size(); + uint32_t jointIndex = (uint32_t)hfmModel.joints.size(); joint.translation = fbxModel.translation; // these are usually in centimeters joint.preTransform = fbxModel.preTransform; @@ -1613,7 +1613,7 @@ HFMModel* FBXSerializer::extractHFMModel(const hifi::VariantHash& mapping, const // transform cluster vertices to joint-frame and save for later glm::mat4 meshToJoint = glm::inverse(joint.bindTransform) * modelTransform; ShapeVertices& points = hfmModel.shapeVertices.at(jointIndex); - foreach (const glm::vec3& vertex, extracted.mesh.vertices) { + for (const glm::vec3& vertex : extracted.mesh.vertices) { const glm::mat4 vertexTransform = meshToJoint * glm::translate(vertex); points.push_back(extractTranslation(vertexTransform)); } @@ -1628,7 +1628,7 @@ HFMModel* FBXSerializer::extractHFMModel(const hifi::VariantHash& mapping, const } hfmModel.meshes.push_back(extracted.mesh); - int meshIndex = hfmModel.meshes.size() - 1; + uint32_t meshIndex = (uint32_t)hfmModel.meshes.size() - 1; meshIDsToMeshIndices.insert(it.key(), meshIndex); } diff --git a/libraries/fbx/src/FBXSerializer_Mesh.cpp b/libraries/fbx/src/FBXSerializer_Mesh.cpp index 802db4b428..479e7acfc9 100644 --- a/libraries/fbx/src/FBXSerializer_Mesh.cpp +++ b/libraries/fbx/src/FBXSerializer_Mesh.cpp @@ -500,7 +500,7 @@ ExtractedMesh FBXSerializer::extractMesh(const FBXNode& object, unsigned int& me data.extracted.partMaterialTextures.append(materialTexture); } - partIndexPlusOne = data.extracted.mesh.parts.size(); + partIndexPlusOne = (int)data.extracted.mesh.parts.size(); } // give the mesh part this index @@ -535,7 +535,7 @@ ExtractedMesh FBXSerializer::extractMesh(const FBXNode& object, unsigned int& me if (partIndex == 0) { data.extracted.partMaterialTextures.append(materialTexture); data.extracted.mesh.parts.resize(data.extracted.mesh.parts.size() + 1); - partIndex = data.extracted.mesh.parts.size(); + partIndex = (int)data.extracted.mesh.parts.size(); } HFMMeshPart& part = data.extracted.mesh.parts[partIndex - 1]; diff --git a/libraries/fbx/src/OBJSerializer.cpp b/libraries/fbx/src/OBJSerializer.cpp index d6be066674..e1fc85ca2a 100644 --- a/libraries/fbx/src/OBJSerializer.cpp +++ b/libraries/fbx/src/OBJSerializer.cpp @@ -752,11 +752,11 @@ HFMModel::Pointer OBJSerializer::read(const hifi::ByteArray& data, const hifi::V } // clean up old mesh parts. - int unmodifiedMeshPartCount = mesh.parts.size(); + auto unmodifiedMeshPartCount = (uint32_t)mesh.parts.size(); mesh.parts.clear(); mesh.parts = hfmMeshParts; - for (int i = 0, meshPartCount = 0; i < unmodifiedMeshPartCount; i++, meshPartCount++) { + for (uint32_t i = 0, meshPartCount = 0; i < unmodifiedMeshPartCount; i++, meshPartCount++) { FaceGroup faceGroup = faceGroups[meshPartCount]; // Now that each mesh has been created with its own unique material mappings, fill them with data (vertex data is duplicated, face data is not). diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index e4fefacb96..aa3708fb1e 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -804,7 +804,7 @@ void Model::calculateTriangleSets(const HFMModel& hfmModel) { for (uint32_t i = 0; i < numberOfMeshes; i++) { const HFMMesh& mesh = hfmModel.meshes.at(i); - const uint32_t numberOfParts = mesh.parts.size(); + const uint32_t numberOfParts = (uint32_t)mesh.parts.size(); auto& meshTriangleSets = _modelSpaceMeshTriangleSets[i]; meshTriangleSets.resize(numberOfParts); From 5837053f50c18109ee06e16e6fac148fe6c75848 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Fri, 13 Sep 2019 16:56:30 -0700 Subject: [PATCH 09/10] Fix miscellaneous build errors/warnings --- assignment-client/src/avatars/ScriptableAvatar.cpp | 4 ++-- libraries/fbx/src/GLTFSerializer.cpp | 2 +- tools/vhacd-util/src/VHACDUtil.cpp | 14 +++++++------- tools/vhacd-util/src/VHACDUtilApp.cpp | 6 +++--- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/assignment-client/src/avatars/ScriptableAvatar.cpp b/assignment-client/src/avatars/ScriptableAvatar.cpp index 044ab86942..383f583327 100644 --- a/assignment-client/src/avatars/ScriptableAvatar.cpp +++ b/assignment-client/src/avatars/ScriptableAvatar.cpp @@ -144,10 +144,10 @@ void ScriptableAvatar::update(float deltatime) { } _animationDetails.currentFrame = currentFrame; - const QVector& modelJoints = _bind->getHFMModel().joints; + const std::vector& modelJoints = _bind->getHFMModel().joints; QStringList animationJointNames = _animation->getJointNames(); - const int nJoints = modelJoints.size(); + const auto nJoints = (int)modelJoints.size(); if (_jointData.size() != nJoints) { _jointData.resize(nJoints); } diff --git a/libraries/fbx/src/GLTFSerializer.cpp b/libraries/fbx/src/GLTFSerializer.cpp index 4c4050c935..4f1d871158 100755 --- a/libraries/fbx/src/GLTFSerializer.cpp +++ b/libraries/fbx/src/GLTFSerializer.cpp @@ -1613,7 +1613,7 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash& hfmModel.meshExtents.minimum -= glm::vec3(EPSILON, EPSILON, EPSILON); hfmModel.meshExtents.maximum += glm::vec3(EPSILON, EPSILON, EPSILON); - mesh.meshIndex = hfmModel.meshes.size(); + mesh.meshIndex = (int)hfmModel.meshes.size(); } ++nodecount; } diff --git a/tools/vhacd-util/src/VHACDUtil.cpp b/tools/vhacd-util/src/VHACDUtil.cpp index a5ad5bc891..3410d35e6a 100644 --- a/tools/vhacd-util/src/VHACDUtil.cpp +++ b/tools/vhacd-util/src/VHACDUtil.cpp @@ -154,7 +154,7 @@ void vhacd::VHACDUtil::fattenMesh(const HFMMesh& mesh, const glm::mat4& modelOff newMeshPart.triangleIndices << index0 << index3 << index1; newMeshPart.triangleIndices << index1 << index3 << index2; newMeshPart.triangleIndices << index2 << index3 << index0; - result.parts.append(newMeshPart); + result.parts.push_back(newMeshPart); } } @@ -259,8 +259,8 @@ void vhacd::VHACDUtil::getConvexResults(VHACD::IVHACD* convexifier, HFMMesh& res VHACD::IVHACD::ConvexHull hull; convexifier->GetConvexHull(j, hull); - resultMesh.parts.append(HFMMeshPart()); - HFMMeshPart& resultMeshPart = resultMesh.parts.last(); + resultMesh.parts.push_back(HFMMeshPart()); + HFMMeshPart& resultMeshPart = resultMesh.parts.back(); int hullIndexStart = resultMesh.vertices.size(); resultMesh.vertices.reserve(hullIndexStart + hull.m_nPoints); @@ -300,8 +300,8 @@ bool vhacd::VHACDUtil::computeVHACD(HFMModel& hfmModel, } // count the mesh-parts - int numParts = 0; - foreach (const HFMMesh& mesh, hfmModel.meshes) { + size_t numParts = 0; + for (const HFMMesh& mesh : hfmModel.meshes) { numParts += mesh.parts.size(); } if (_verbose) { @@ -311,8 +311,8 @@ bool vhacd::VHACDUtil::computeVHACD(HFMModel& hfmModel, VHACD::IVHACD * convexifier = VHACD::CreateVHACD(); result.meshExtents.reset(); - result.meshes.append(HFMMesh()); - HFMMesh &resultMesh = result.meshes.last(); + result.meshes.push_back(HFMMesh()); + HFMMesh &resultMesh = result.meshes.back(); const uint32_t POINT_STRIDE = 3; const uint32_t TRIANGLE_STRIDE = 3; diff --git a/tools/vhacd-util/src/VHACDUtilApp.cpp b/tools/vhacd-util/src/VHACDUtilApp.cpp index 3d675f8baf..61a6b38181 100644 --- a/tools/vhacd-util/src/VHACDUtilApp.cpp +++ b/tools/vhacd-util/src/VHACDUtilApp.cpp @@ -387,7 +387,7 @@ VHACDUtilApp::VHACDUtilApp(int argc, char* argv[]) : } if (verbose) { - int totalHulls = result.meshes[0].parts.size(); + auto totalHulls = result.meshes[0].parts.size(); qDebug() << "output file =" << outputFilename; qDebug() << "vertices =" << totalVertices; qDebug() << "triangles =" << totalTriangles; @@ -402,7 +402,7 @@ VHACDUtilApp::VHACDUtilApp(int argc, char* argv[]) : HFMMesh result; // count the mesh-parts - unsigned int meshCount = 0; + size_t meshCount = 0; foreach (const HFMMesh& mesh, fbx.meshes) { meshCount += mesh.parts.size(); } @@ -412,7 +412,7 @@ VHACDUtilApp::VHACDUtilApp(int argc, char* argv[]) : vUtil.fattenMesh(mesh, fbx.offset, result); } - newFbx.meshes.append(result); + newFbx.meshes.push_back(result); writeOBJ(outputFilename, newFbx, outputCentimeters); } } From 46616b4efddf07bdbe0c7e6e43376f410a58a2d7 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Mon, 16 Sep 2019 09:55:25 -0700 Subject: [PATCH 10/10] Fix more integer conversion warnings --- interface/src/ModelPropertiesDialog.cpp | 2 +- libraries/fbx/src/FST.cpp | 2 +- libraries/hfm/src/hfm/HFM.cpp | 4 ++-- libraries/model-baker/src/model-baker/Baker.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/interface/src/ModelPropertiesDialog.cpp b/interface/src/ModelPropertiesDialog.cpp index d67341990d..bf7fd26b08 100644 --- a/interface/src/ModelPropertiesDialog.cpp +++ b/interface/src/ModelPropertiesDialog.cpp @@ -80,7 +80,7 @@ QVariantHash ModelPropertiesDialog::getMapping() const { // update the joint indices QVariantHash jointIndices; - for (int i = 0; i < _hfmModel.joints.size(); i++) { + for (size_t i = 0; i < _hfmModel.joints.size(); i++) { jointIndices.insert(_hfmModel.joints.at(i).name, QString::number(i)); } mapping.insert(JOINT_INDEX_FIELD, jointIndices); diff --git a/libraries/fbx/src/FST.cpp b/libraries/fbx/src/FST.cpp index b6f109c217..5f5b7cf637 100644 --- a/libraries/fbx/src/FST.cpp +++ b/libraries/fbx/src/FST.cpp @@ -77,7 +77,7 @@ FST* FST::createFSTFromModel(const QString& fstPath, const QString& modelFilePat mapping.insert(JOINT_FIELD, joints); QVariantHash jointIndices; - for (int i = 0; i < hfmModel.joints.size(); i++) { + for (size_t i = 0; i < (size_t)hfmModel.joints.size(); i++) { jointIndices.insert(hfmModel.joints.at(i).name, QString::number(i)); } mapping.insert(JOINT_INDEX_FIELD, jointIndices); diff --git a/libraries/hfm/src/hfm/HFM.cpp b/libraries/hfm/src/hfm/HFM.cpp index b297db4bcb..ae68c15045 100644 --- a/libraries/hfm/src/hfm/HFM.cpp +++ b/libraries/hfm/src/hfm/HFM.cpp @@ -166,11 +166,11 @@ void HFMModel::computeKdops() { glm::vec3(INV_SQRT_3, INV_SQRT_3, -INV_SQRT_3), glm::vec3(INV_SQRT_3, -INV_SQRT_3, -INV_SQRT_3) }; - if (joints.size() != (int)shapeVertices.size()) { + if (joints.size() != shapeVertices.size()) { return; } // now that all joints have been scanned compute a k-Dop bounding volume of mesh - for (int i = 0; i < joints.size(); ++i) { + for (size_t i = 0; i < joints.size(); ++i) { HFMJoint& joint = joints[i]; // NOTE: points are in joint-frame diff --git a/libraries/model-baker/src/model-baker/Baker.cpp b/libraries/model-baker/src/model-baker/Baker.cpp index 50221c4481..0c6aac6f22 100644 --- a/libraries/model-baker/src/model-baker/Baker.cpp +++ b/libraries/model-baker/src/model-baker/Baker.cpp @@ -37,7 +37,7 @@ namespace baker { output.edit2() = hfmModelIn->meshIndicesToModelNames; auto& blendshapesPerMesh = output.edit3(); blendshapesPerMesh.reserve(hfmModelIn->meshes.size()); - for (int i = 0; i < hfmModelIn->meshes.size(); i++) { + for (size_t i = 0; i < hfmModelIn->meshes.size(); i++) { blendshapesPerMesh.push_back(hfmModelIn->meshes[i].blendshapes.toStdVector()); } output.edit4() = hfmModelIn->joints;