Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2021-01-17 13:16:23 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-01-17 13:21:18 +0300
commit06da6e2eaf76d475ea0743960b308d6c034eb8bf (patch)
tree8b6ea0089a39d8e07f6e461c03167dc9880b7983 /source
parent5f9358a373cb7458e273dfd4be651e6dfaf0161a (diff)
Add Object Tool: scale the cursor plane based on the depth
Draw the cursor plane smaller then further away from the view. This makes the plane being drawn onto easier to perceive.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/space_view3d/view3d_placement.c41
1 files changed, 33 insertions, 8 deletions
diff --git a/source/blender/editors/space_view3d/view3d_placement.c b/source/blender/editors/space_view3d/view3d_placement.c
index 7f0a7272ebd..31032eab547 100644
--- a/source/blender/editors/space_view3d/view3d_placement.c
+++ b/source/blender/editors/space_view3d/view3d_placement.c
@@ -1978,7 +1978,27 @@ static void cursor_plane_draw(bContext *C, int x, int y, void *customdata)
}
/* Draw */
- const float pixel_size = ED_view3d_pixel_size(rv3d, plc->matrix[3]);
+ float pixel_size;
+
+ /* Arbitrary, 1.0 is a little too strong though. */
+ float color_alpha = 0.75f;
+
+ if (rv3d->is_persp) {
+ float center[3];
+ negate_v3_v3(center, rv3d->ofs);
+ pixel_size = ED_view3d_pixel_size(rv3d, center);
+
+ /* Scale down the alpha when this is drawn very small,
+ * since the add shader causes the small size to show too dense & bright. */
+ const float relative_pixel_scale = pixel_size / ED_view3d_pixel_size(rv3d, plc->matrix[3]);
+ if (relative_pixel_scale < 1.0f) {
+ color_alpha *= max_ff(square_f(relative_pixel_scale), 0.3f);
+ }
+ }
+ else {
+ pixel_size = ED_view3d_pixel_size(rv3d, plc->matrix[3]);
+ }
+
if (pixel_size > FLT_EPSILON) {
/* Setup viewport & matrix. */
@@ -1988,7 +2008,7 @@ static void cursor_plane_draw(bContext *C, int x, int y, void *customdata)
GPU_matrix_projection_set(rv3d->winmat);
GPU_matrix_set(rv3d->viewmat);
- const float scale_mod = U.gizmo_size * U.dpi_fac;
+ const float scale_mod = U.gizmo_size * 2 * U.dpi_fac;
float final_scale = (scale_mod * pixel_size);
@@ -2000,13 +2020,18 @@ static void cursor_plane_draw(bContext *C, int x, int y, void *customdata)
float fac = final_scale_fade / final_scale;
- float color[4] = {1, 1, 1, 1};
- color[3] = square_f(1.0f - fac);
- gizmo_plane_draw_grid(
- lines * lines_subdiv, final_scale, final_scale_fade, plc->matrix, plc->plane_axis, color);
+ float color[4] = {1, 1, 1, color_alpha};
+ color[3] *= square_f(1.0f - fac);
+ if (color[3] > 0.0f) {
+ gizmo_plane_draw_grid(lines * lines_subdiv,
+ final_scale,
+ final_scale_fade,
+ plc->matrix,
+ plc->plane_axis,
+ color);
+ }
- /* Arbitrary, 1.0 is a little too strong though. */
- color[3] = 0.75f;
+ color[3] = color_alpha;
/* When the grid is large, we only need the 2x lines in the middle. */
if (fac < 0.2f) {
lines = 1;