mirror of
https://github.com/godotengine/godot.git
synced 2025-12-07 13:49:54 +00:00
Support MultiMesh objects in the scene Advanced Import Settings dialog
This commit is contained in:
parent
9dd6c4dbac
commit
596fdd018b
1 changed files with 22 additions and 15 deletions
|
|
@ -40,6 +40,7 @@
|
|||
#include "editor/settings/editor_settings.h"
|
||||
#include "editor/themes/editor_scale.h"
|
||||
#include "scene/3d/importer_mesh_instance_3d.h"
|
||||
#include "scene/3d/multimesh_instance_3d.h"
|
||||
#include "scene/animation/animation_player.h"
|
||||
#include "scene/gui/subviewport_container.h"
|
||||
#include "scene/main/timer.h"
|
||||
|
|
@ -474,6 +475,12 @@ void SceneImportSettingsDialog::_fill_scene(Node *p_node, TreeItem *p_parent_ite
|
|||
for (int i = 0; i < p_node->get_child_count(); i++) {
|
||||
_fill_scene(p_node->get_child(i), item);
|
||||
}
|
||||
Transform3D accum_xform;
|
||||
Node3D *base = Object::cast_to<Node3D>(p_node);
|
||||
while (base) {
|
||||
accum_xform = base->get_transform() * accum_xform;
|
||||
base = Object::cast_to<Node3D>(base->get_parent());
|
||||
}
|
||||
MeshInstance3D *mesh_node = Object::cast_to<MeshInstance3D>(p_node);
|
||||
if (mesh_node && mesh_node->get_mesh().is_valid()) {
|
||||
// This controls the display of mesh resources in the import settings dialog tree (the white mesh icon).
|
||||
|
|
@ -489,13 +496,6 @@ void SceneImportSettingsDialog::_fill_scene(Node *p_node, TreeItem *p_parent_ite
|
|||
mesh_node->add_child(collider_view, true);
|
||||
collider_view->set_owner(mesh_node);
|
||||
|
||||
Transform3D accum_xform;
|
||||
Node3D *base = mesh_node;
|
||||
while (base) {
|
||||
accum_xform = base->get_transform() * accum_xform;
|
||||
base = Object::cast_to<Node3D>(base->get_parent());
|
||||
}
|
||||
|
||||
AABB aabb = accum_xform.xform(mesh_node->get_mesh()->get_aabb());
|
||||
|
||||
if (first_aabb) {
|
||||
|
|
@ -505,20 +505,27 @@ void SceneImportSettingsDialog::_fill_scene(Node *p_node, TreeItem *p_parent_ite
|
|||
contents_aabb.merge_with(aabb);
|
||||
}
|
||||
}
|
||||
MultiMeshInstance3D *multi_mesh_node = Object::cast_to<MultiMeshInstance3D>(p_node);
|
||||
if (multi_mesh_node && multi_mesh_node->get_multimesh().is_valid()) {
|
||||
const Ref<MultiMesh> multi_mesh = multi_mesh_node->get_multimesh();
|
||||
const Ref<Mesh> mm_mesh = multi_mesh->get_mesh();
|
||||
if (mm_mesh.is_valid()) {
|
||||
_fill_mesh(scene_tree, mm_mesh, item);
|
||||
}
|
||||
const AABB aabb = accum_xform.xform(multi_mesh->get_aabb());
|
||||
if (first_aabb) {
|
||||
contents_aabb = aabb;
|
||||
first_aabb = false;
|
||||
} else {
|
||||
contents_aabb.merge_with(aabb);
|
||||
}
|
||||
}
|
||||
|
||||
Skeleton3D *skeleton = Object::cast_to<Skeleton3D>(p_node);
|
||||
if (skeleton) {
|
||||
Ref<ArrayMesh> bones_mesh = Skeleton3DGizmoPlugin::get_bones_mesh(skeleton, -1, true);
|
||||
|
||||
bones_mesh_preview->set_mesh(bones_mesh);
|
||||
|
||||
Transform3D accum_xform;
|
||||
Node3D *base = skeleton;
|
||||
while (base) {
|
||||
accum_xform = base->get_transform() * accum_xform;
|
||||
base = Object::cast_to<Node3D>(base->get_parent());
|
||||
}
|
||||
|
||||
bones_mesh_preview->set_transform(accum_xform * skeleton->get_transform());
|
||||
|
||||
AABB aabb = accum_xform.xform(bones_mesh->get_aabb());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue