diff options
author | lawnjelly <lawnjelly@gmail.com> | 2020-12-24 10:59:57 +0000 |
---|---|---|
committer | lawnjelly <lawnjelly@gmail.com> | 2020-12-24 11:19:50 +0000 |
commit | 6d687de9b84f85c87846e6a48b81b1c495bb926b (patch) | |
tree | 67efb0c9b820a3653e06d58022432a2cf2de1339 /servers/rendering | |
parent | dbd00d932e27088f6f8a8fc88e5dd75796719ada (diff) |
Fix BVH to world_aabb, and call update
The calls to the BVH need to use the world space AABB, rather than local space for it to work. Also, update was not being called which is required to update the AABB as objects move.
Diffstat (limited to 'servers/rendering')
-rw-r--r-- | servers/rendering/renderer_scene_cull.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp index 1db678a441..8bb9e6b8b0 100644 --- a/servers/rendering/renderer_scene_cull.cpp +++ b/servers/rendering/renderer_scene_cull.cpp @@ -1070,9 +1070,15 @@ void RendererSceneCull::_update_instance(Instance *p_instance) { if (!p_instance->indexer_id.is_valid()) { if ((1 << p_instance->base_type) & RS::INSTANCE_GEOMETRY_MASK) { - p_instance->indexer_id = p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY].insert(p_instance->aabb, p_instance); + p_instance->indexer_id = p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY].insert(p_instance->transformed_aabb, p_instance); } else { - p_instance->indexer_id = p_instance->scenario->indexers[Scenario::INDEXER_VOLUMES].insert(p_instance->aabb, p_instance); + p_instance->indexer_id = p_instance->scenario->indexers[Scenario::INDEXER_VOLUMES].insert(p_instance->transformed_aabb, p_instance); + } + } else { + if ((1 << p_instance->base_type) & RS::INSTANCE_GEOMETRY_MASK) { + p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY].update(p_instance->indexer_id, p_instance->transformed_aabb); + } else { + p_instance->scenario->indexers[Scenario::INDEXER_VOLUMES].update(p_instance->indexer_id, p_instance->transformed_aabb); } } |