From 80cf786b04436c0fbefbc4e226761d04d7d3e4d9 Mon Sep 17 00:00:00 2001 From: Cory Petkovsek <632766+TokisanGames@users.noreply.github.com> Date: Sat, 17 Feb 2024 01:44:48 +0700 Subject: [PATCH] Fix dithered brushing with scale < 1 --- src/terrain_3d_editor.cpp | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/terrain_3d_editor.cpp b/src/terrain_3d_editor.cpp index 67ddba06d..4c37d2ef5 100644 --- a/src/terrain_3d_editor.cpp +++ b/src/terrain_3d_editor.cpp @@ -149,18 +149,17 @@ void Terrain3DEditor::_operate_map(Vector3 p_global_position, real_t p_camera_di } Object::cast_to(_terrain->get_plugin()->get("ui"))->call("set_decal_rotation", rot); - Vector3 descaled_position = p_global_position / _terrain->get_mesh_vertex_spacing(); - AABB edited_area; edited_area.position = p_global_position - Vector3(brush_size, 0.0f, brush_size) / 2.0f; edited_area.size = Vector3(brush_size, 0.0f, brush_size); - for (int x = 0; x < brush_size; x++) { - for (int y = 0; y < brush_size; y++) { - Vector2i brush_offset = Vector2i(x, y) - (Vector2i(brush_size, brush_size) / 2); - Vector3 brush_global_position = Vector3(0.5f, 0.f, 0.5f) + - Vector3(p_global_position.x + real_t(brush_offset.x), p_global_position.y, - p_global_position.z + real_t(brush_offset.y)); + real_t vertex_spacing = _terrain->get_mesh_vertex_spacing(); + for (real_t x = 0.f; x < brush_size; x += vertex_spacing) { + for (real_t y = 0.f; y < brush_size; y += vertex_spacing) { + Vector2 brush_offset = Vector2(x, y) - (Vector2(brush_size, brush_size) / 2.f); + Vector3 brush_global_position = + Vector3(p_global_position.x + brush_offset.x + .5f, p_global_position.y, + p_global_position.z + brush_offset.y + .5f); // If we're brushing across a region boundary, possibly add a region, and get the other map int new_region_index = storage->get_region_index(brush_global_position); @@ -223,11 +222,10 @@ void Terrain3DEditor::_operate_map(Vector3 p_global_position, real_t p_camera_di destf = Math::lerp(srcf, height, brush_alpha * opacity); break; case AVERAGE: { - real_t step = _terrain->get_mesh_vertex_spacing(); - Vector3 left_position = brush_global_position - Vector3(step, 0, 0); - Vector3 right_position = brush_global_position + Vector3(step, 0, 0); - Vector3 down_position = brush_global_position - Vector3(0, 0, step); - Vector3 up_position = brush_global_position + Vector3(0, 0, step); + Vector3 left_position = brush_global_position - Vector3(vertex_spacing, 0.f, 0.f); + Vector3 right_position = brush_global_position + Vector3(vertex_spacing, 0.f, 0.f); + Vector3 down_position = brush_global_position - Vector3(0.f, 0.f, vertex_spacing); + Vector3 up_position = brush_global_position + Vector3(0.f, 0.f, vertex_spacing); real_t left = srcf, right = srcf, up = srcf, down = srcf;