mirror of
https://github.com/godotengine/godot.git
synced 2024-10-23 13:41:43 +00:00
Merge pull request #44649 from lyuma/bone_aabb_blendshapes
Fix blendshapes and calculation of bone_aabbs
This commit is contained in:
commit
ecda989c85
|
@ -62,9 +62,15 @@ void EditorSceneImporterMesh::add_surface(Mesh::PrimitiveType p_primitive, const
|
||||||
s.arrays = p_arrays;
|
s.arrays = p_arrays;
|
||||||
s.name = p_name;
|
s.name = p_name;
|
||||||
|
|
||||||
|
Vector<Vector3> vertex_array = p_arrays[Mesh::ARRAY_VERTEX];
|
||||||
|
int vertex_count = vertex_array.size();
|
||||||
|
ERR_FAIL_COND(vertex_count == 0);
|
||||||
|
|
||||||
for (int i = 0; i < blend_shapes.size(); i++) {
|
for (int i = 0; i < blend_shapes.size(); i++) {
|
||||||
Array bsdata = p_blend_shapes[i];
|
Array bsdata = p_blend_shapes[i];
|
||||||
ERR_FAIL_COND(bsdata.size() != Mesh::ARRAY_MAX);
|
ERR_FAIL_COND(bsdata.size() != Mesh::ARRAY_MAX);
|
||||||
|
Vector<Vector3> vertex_data = bsdata[Mesh::ARRAY_VERTEX];
|
||||||
|
ERR_FAIL_COND(vertex_data.size() != vertex_count);
|
||||||
Surface::BlendShape bs;
|
Surface::BlendShape bs;
|
||||||
bs.arrays = bsdata;
|
bs.arrays = bsdata;
|
||||||
s.blend_shape_data.push_back(bs);
|
s.blend_shape_data.push_back(bs);
|
||||||
|
|
|
@ -2408,9 +2408,6 @@ void RendererStorageRD::mesh_add_surface(RID p_mesh, const RS::SurfaceData &p_su
|
||||||
Mesh *mesh = mesh_owner.getornull(p_mesh);
|
Mesh *mesh = mesh_owner.getornull(p_mesh);
|
||||||
ERR_FAIL_COND(!mesh);
|
ERR_FAIL_COND(!mesh);
|
||||||
|
|
||||||
//ensure blend shape consistency
|
|
||||||
ERR_FAIL_COND(mesh->blend_shape_count && p_surface.bone_aabbs.size() != mesh->bone_aabbs.size());
|
|
||||||
|
|
||||||
#ifdef DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
//do a validation, to catch errors first
|
//do a validation, to catch errors first
|
||||||
{
|
{
|
||||||
|
@ -2576,6 +2573,11 @@ void RendererStorageRD::mesh_add_surface(RID p_mesh, const RS::SurfaceData &p_su
|
||||||
mesh->bone_aabbs = p_surface.bone_aabbs;
|
mesh->bone_aabbs = p_surface.bone_aabbs;
|
||||||
mesh->aabb = p_surface.aabb;
|
mesh->aabb = p_surface.aabb;
|
||||||
} else {
|
} else {
|
||||||
|
if (mesh->bone_aabbs.size() < p_surface.bone_aabbs.size()) {
|
||||||
|
// ArrayMesh::_surface_set_data only allocates bone_aabbs up to max_bone
|
||||||
|
// Each surface may affect different numbers of bones.
|
||||||
|
mesh->bone_aabbs.resize(p_surface.bone_aabbs.size());
|
||||||
|
}
|
||||||
for (int i = 0; i < p_surface.bone_aabbs.size(); i++) {
|
for (int i = 0; i < p_surface.bone_aabbs.size(); i++) {
|
||||||
mesh->bone_aabbs.write[i].merge_with(p_surface.bone_aabbs[i]);
|
mesh->bone_aabbs.write[i].merge_with(p_surface.bone_aabbs[i]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user