// Returns closest vertex in world space and distance
// a and b define the line in 3d space
-std::pair<glm::vec3, float> Model::closestVertex(Model::Node &n, glm::vec3 a, glm::vec3 b, glm::mat4 parentTrans) const {
- float closestDist = FLT_MAX;
- glm::vec3 closestVert;
+Model::VertexLookup Model::closestVertex(Model::Node &n, glm::vec3 a, glm::vec3 b, glm::mat4 parentTrans) const {
+ Model::VertexLookup closest;
+ closest.distance = FLT_MAX;
for (int i = 0; i < n.ai.mNumMeshes; i++) {
int meshIdx = n.ai.mMeshes[i];
vPos = parentTrans * aiMatrixToMat4(n.ai.mTransformation) * vPos;
float dist = glm::distance(glm::vec3(vPos),
glm::closestPointOnLine(glm::vec3(vPos), a, b));
- if (dist < closestDist) {
- closestVert = glm::vec3(vPos);
- closestDist = dist;
+ if (dist < closest.distance) {
+ closest.pos = glm::vec3(vPos);
+ closest.distance = dist;
+ closest.meshIdx = i;
+ closest.vertIdx = j;
}
}
}
for (auto child: n.getChildren()) {
auto childRes = closestVertex(*child, a, b, parentTrans * aiMatrixToMat4(n.ai.mTransformation));
- if (childRes.second < closestDist) {
- closestVert = childRes.first;
- closestDist = childRes.second;
- }
+ if (childRes.distance < closest.distance)
+ closest = childRes;
}
- return { closestVert, closestDist };
+ return closest;
}