diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2021-01-26 22:35:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-26 22:35:11 +0100 |
commit | 1f5669d8d4a9515d605ad9fc55313fc27bd6d250 (patch) | |
tree | 5d9c84f440750239ff5d8866afb32a2728e49270 /modules/fbx/data/pivot_transform.cpp | |
parent | e330b945b706c63f4ecff6809094859354968f86 (diff) | |
parent | 86c7faa169a2d11be7ea3c83ae833ffba0660556 (diff) | |
download | redot-engine-1f5669d8d4a9515d605ad9fc55313fc27bd6d250.tar.gz |
Merge pull request #44799 from RevoluPowered/fbx-fix-zero-scaling
mesh indexing failing with small scale values
Diffstat (limited to 'modules/fbx/data/pivot_transform.cpp')
-rw-r--r-- | modules/fbx/data/pivot_transform.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/modules/fbx/data/pivot_transform.cpp b/modules/fbx/data/pivot_transform.cpp index 7a56074bc5..1895af6f9f 100644 --- a/modules/fbx/data/pivot_transform.cpp +++ b/modules/fbx/data/pivot_transform.cpp @@ -76,12 +76,14 @@ void PivotTransform::ReadTransformChain() { const Vector3 &Scaling = ImportUtils::safe_import_vector3(FBXDocParser::PropertyGet<Vector3>(props, "Lcl Scaling", ok)); if (ok) { scaling = Scaling; + } else { + scaling = Vector3(1, 1, 1); } const Vector3 &GeometricScaling = ImportUtils::safe_import_vector3(FBXDocParser::PropertyGet<Vector3>(props, "GeometricScaling", ok)); if (ok) { geometric_scaling = GeometricScaling; } else { - geometric_scaling = Vector3(0, 0, 0); + geometric_scaling = Vector3(1, 1, 1); } const Vector3 &GeometricRotation = ImportUtils::safe_import_vector3(FBXDocParser::PropertyGet<Vector3>(props, "GeometricRotation", ok)); @@ -207,6 +209,8 @@ Transform PivotTransform::ComputeGlobalTransform(Vector3 p_translation, Quat p_r Transform local_transform = T * Roff * Rp * Rpre * R * Rpost.affine_inverse() * Rp.affine_inverse() * Soff * Sp * S * Sp.affine_inverse(); //Transform local_translation_pivoted = Transform(Basis(), LocalTransform.origin); + ERR_FAIL_COND_V_MSG(local_transform.basis.determinant() == 0, Transform(), "Det == 0 prevented in scene file"); + // manual hack to force SSC not to be compensated for - until we can handle it properly with tests return parent_global_xform * local_transform; } @@ -290,5 +294,14 @@ void PivotTransform::Execute() { ComputePivotTransform(); ImportUtils::debug_xform("global xform: ", GlobalTransform); + + if (LocalTransform.basis.determinant() == 0) { + print_error("Serious det == 0!"); + } + + if (GlobalTransform.basis.determinant() == 0) { + print_error("Serious! node has det == 0!"); + } + computed_global_xform = true; } |