If a model transform diagonal is 0, set the 0 diagonal values to a small value (closes #3177)

This commit is contained in:
Alexander Bock
2025-08-16 12:11:19 +02:00
parent 6b852c9324
commit eed88eed35

View File

@@ -407,7 +407,18 @@ namespace {
"Cannot have degenerate vector"
);
const glm::dmat4 inverseModelTransform = glm::inverse(node.modelTransform());
glm::dmat4 modelTransform = node.modelTransform();
if (modelTransform[0][0] == 0.0) {
modelTransform[0][0] = std::numeric_limits<double>::epsilon();
}
if (modelTransform[1][1] == 0.0) {
modelTransform[1][1] = std::numeric_limits<double>::epsilon();
}
if (modelTransform[2][2] == 0.0) {
modelTransform[2][2] = std::numeric_limits<double>::epsilon();
}
const glm::dmat4 inverseModelTransform = glm::inverse(modelTransform);
const glm::dvec3 cameraPositionModelSpace =
glm::dvec3(inverseModelTransform * glm::dvec4(cameraPositionWorldSpace, 1.0));
const openspace::SurfacePositionHandle posHandle =
@@ -1305,7 +1316,16 @@ OrbitalNavigator::CameraRotationDecomposition
const glm::dvec3 cameraUp = cameraPose.rotation * Camera::UpDirectionCameraSpace;
const glm::dvec3 cameraViewDirection = ghoul::viewDirection(cameraPose.rotation);
const glm::dmat4 modelTransform = reference.modelTransform();
glm::dmat4 modelTransform = reference.modelTransform();
if (modelTransform[0][0] == 0.0) {
modelTransform[0][0] = std::numeric_limits<double>::epsilon();
}
if (modelTransform[1][1] == 0.0) {
modelTransform[1][1] = std::numeric_limits<double>::epsilon();
}
if (modelTransform[2][2] == 0.0) {
modelTransform[2][2] = std::numeric_limits<double>::epsilon();
}
const glm::dmat4 inverseModelTransform = glm::inverse(modelTransform);
const glm::dvec3 cameraPositionModelSpace = glm::dvec3(inverseModelTransform *
glm::dvec4(cameraPose.position, 1));