diff --git a/libraries/model-serializers/src/GLTFSerializer.cpp b/libraries/model-serializers/src/GLTFSerializer.cpp index 9aadf951cc..389fe3534a 100755 --- a/libraries/model-serializers/src/GLTFSerializer.cpp +++ b/libraries/model-serializers/src/GLTFSerializer.cpp @@ -819,7 +819,7 @@ void GLTFSerializer::generateTargetData(int index, float weight, QVector storedValues; addArrayFromAccessor(accessor, storedValues); - for (int n = 0; n < storedValues.size(); n = n + 3) { + for (int n = 0; n + 2 < storedValues.size(); n = n + 3) { returnVector.push_back(glm::vec3(weight * storedValues[n], weight * storedValues[n + 1], weight * storedValues[n + 2])); } } @@ -1246,7 +1246,7 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash& QVector newJoints; QVector newWeights; - for (int n = 0; n < indices.size(); n = n + 3) { + for (int n = 0; n + 2 < indices.size(); n = n + 3) { int v1_index = (indices[n + 0] * 3); int v2_index = (indices[n + 1] * 3); int v3_index = (indices[n + 2] * 3); @@ -1356,17 +1356,17 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash& part.triangleIndices.append(validatedIndices); - for (int n = 0; n < vertices.size(); n = n + verticesStride) { + for (int n = 0; n + verticesStride - 1 < vertices.size(); n = n + verticesStride) { mesh.vertices.push_back(glm::vec3(vertices[n], vertices[n + 1], vertices[n + 2])); } - for (int n = 0; n < normals.size(); n = n + normalStride) { + for (int n = 0; n + normalStride - 1 < normals.size(); n = n + normalStride) { mesh.normals.push_back(glm::vec3(normals[n], normals[n + 1], normals[n + 2])); } // TODO: add correct tangent generation if (tangents.size() == partVerticesCount * tangentStride) { - for (int n = 0; n < tangents.size(); n += tangentStride) { + for (int n = 0; n + tangentStride - 1 < tangents.size(); n += tangentStride) { float tanW = tangentStride == 4 ? tangents[n + 3] : 1; mesh.tangents.push_back(glm::vec3(tanW * tangents[n], tangents[n + 1], tanW * tangents[n + 2])); } @@ -1379,7 +1379,7 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash& } if (texcoords.size() == partVerticesCount * texCoordStride) { - for (int n = 0; n < texcoords.size(); n = n + 2) { + for (int n = 0; n + 1 < texcoords.size(); n = n + 2) { mesh.texCoords.push_back(glm::vec2(texcoords[n], texcoords[n + 1])); } } else { @@ -1391,7 +1391,7 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash& } if (texcoords2.size() == partVerticesCount * texCoord2Stride) { - for (int n = 0; n < texcoords2.size(); n = n + 2) { + for (int n = 0; n + 1 < texcoords2.size(); n = n + 2) { mesh.texCoords1.push_back(glm::vec2(texcoords2[n], texcoords2[n + 1])); } } else { @@ -1403,7 +1403,7 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash& } if (colors.size() == partVerticesCount * colorStride) { - for (int n = 0; n < colors.size(); n += colorStride) { + for (int n = 0; n + 2 < colors.size(); n += colorStride) { mesh.colors.push_back(ColorUtils::tosRGBVec3(glm::vec3(colors[n], colors[n + 1], colors[n + 2]))); } } else { @@ -1447,7 +1447,7 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash& } if (weights.size() == partVerticesCount * weightStride) { - for (int n = 0; n < weights.size(); n += weightStride) { + for (int n = 0; n + weightStride - 1 < weights.size(); n += weightStride) { clusterWeights.push_back(weights[n]); if (weightStride > 1) { clusterWeights.push_back(weights[n + 1]); @@ -2046,7 +2046,7 @@ bool GLTFSerializer::addArrayFromAccessor(GLTFAccessor& accessor, QVector& ou void GLTFSerializer::retriangulate(const QVector& inIndices, const QVector& in_vertices, const QVector& in_normals, QVector& outIndices, QVector& out_vertices, QVector& out_normals) { - for (int i = 0; i < inIndices.size(); i = i + 3) { + for (int i = 0; i + 2 < inIndices.size(); i = i + 3) { int idx1 = inIndices[i]; int idx2 = inIndices[i+1];