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 /editor/plugins/node_3d_editor_plugin.cpp | |
| parent | e330b945b706c63f4ecff6809094859354968f86 (diff) | |
| parent | 86c7faa169a2d11be7ea3c83ae833ffba0660556 (diff) | |
Merge pull request #44799 from RevoluPowered/fbx-fix-zero-scaling
mesh indexing failing with small scale values
Diffstat (limited to 'editor/plugins/node_3d_editor_plugin.cpp')
| -rw-r--r-- | editor/plugins/node_3d_editor_plugin.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 4fb0013620..dcf38e0617 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -3321,6 +3321,21 @@ void Node3DEditorViewport::update_transform_gizmo_view() { xform.basis.scale(scale); + // if the determinant is zero, we should disable the gizmo from being rendered + // this prevents supplying bad values to the renderer and then having to filter it out again + if (xform.basis.determinant() == 0) { + for (int i = 0; i < 3; i++) { + RenderingServer::get_singleton()->instance_set_visible(move_gizmo_instance[i], false); + RenderingServer::get_singleton()->instance_set_visible(move_plane_gizmo_instance[i], false); + RenderingServer::get_singleton()->instance_set_visible(rotate_gizmo_instance[i], false); + RenderingServer::get_singleton()->instance_set_visible(scale_gizmo_instance[i], false); + RenderingServer::get_singleton()->instance_set_visible(scale_plane_gizmo_instance[i], false); + } + // Rotation white outline + RenderingServer::get_singleton()->instance_set_visible(rotate_gizmo_instance[3], false); + return; + } + for (int i = 0; i < 3; i++) { RenderingServer::get_singleton()->instance_set_transform(move_gizmo_instance[i], xform); RenderingServer::get_singleton()->instance_set_visible(move_gizmo_instance[i], spatial_editor->is_gizmo_visible() && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE)); |