Merge pull request #56044 from timothyqiu/position-nodes
[3.x] Improve axis awareness and visibility for Position2D and Position3D
This commit is contained in:
commit
7249e170f7
2 changed files with 69 additions and 11 deletions
|
@ -1567,19 +1567,46 @@ Position3DSpatialGizmoPlugin::Position3DSpatialGizmoPlugin() {
|
||||||
cursor_points = Vector<Vector3>();
|
cursor_points = Vector<Vector3>();
|
||||||
|
|
||||||
PoolVector<Color> cursor_colors;
|
PoolVector<Color> cursor_colors;
|
||||||
float cs = 0.25;
|
const float cs = 0.25;
|
||||||
|
// Add more points to create a "hard stop" in the color gradient.
|
||||||
cursor_points.push_back(Vector3(+cs, 0, 0));
|
cursor_points.push_back(Vector3(+cs, 0, 0));
|
||||||
|
cursor_points.push_back(Vector3());
|
||||||
|
cursor_points.push_back(Vector3());
|
||||||
cursor_points.push_back(Vector3(-cs, 0, 0));
|
cursor_points.push_back(Vector3(-cs, 0, 0));
|
||||||
|
|
||||||
cursor_points.push_back(Vector3(0, +cs, 0));
|
cursor_points.push_back(Vector3(0, +cs, 0));
|
||||||
|
cursor_points.push_back(Vector3());
|
||||||
|
cursor_points.push_back(Vector3());
|
||||||
cursor_points.push_back(Vector3(0, -cs, 0));
|
cursor_points.push_back(Vector3(0, -cs, 0));
|
||||||
|
|
||||||
cursor_points.push_back(Vector3(0, 0, +cs));
|
cursor_points.push_back(Vector3(0, 0, +cs));
|
||||||
|
cursor_points.push_back(Vector3());
|
||||||
|
cursor_points.push_back(Vector3());
|
||||||
cursor_points.push_back(Vector3(0, 0, -cs));
|
cursor_points.push_back(Vector3(0, 0, -cs));
|
||||||
cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_x_color", "Editor"));
|
|
||||||
cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_x_color", "Editor"));
|
// Use the axis color which is brighter for the positive axis.
|
||||||
cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_y_color", "Editor"));
|
// Use a darkened axis color for the negative axis.
|
||||||
cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_y_color", "Editor"));
|
// This makes it possible to see in which direction the Position3D node is rotated
|
||||||
cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_z_color", "Editor"));
|
// (which can be important depending on how it's used).
|
||||||
cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_z_color", "Editor"));
|
const Color color_x = EditorNode::get_singleton()->get_gui_base()->get_color("axis_x_color", "Editor");
|
||||||
|
cursor_colors.push_back(color_x);
|
||||||
|
cursor_colors.push_back(color_x);
|
||||||
|
// FIXME: Use less strong darkening factor once GH-48573 is fixed.
|
||||||
|
// The current darkening factor compensates for lines being too bright in the 3D editor.
|
||||||
|
cursor_colors.push_back(color_x.linear_interpolate(Color(0, 0, 0), 0.75));
|
||||||
|
cursor_colors.push_back(color_x.linear_interpolate(Color(0, 0, 0), 0.75));
|
||||||
|
|
||||||
|
const Color color_y = EditorNode::get_singleton()->get_gui_base()->get_color("axis_y_color", "Editor");
|
||||||
|
cursor_colors.push_back(color_y);
|
||||||
|
cursor_colors.push_back(color_y);
|
||||||
|
cursor_colors.push_back(color_y.linear_interpolate(Color(0, 0, 0), 0.75));
|
||||||
|
cursor_colors.push_back(color_y.linear_interpolate(Color(0, 0, 0), 0.75));
|
||||||
|
|
||||||
|
const Color color_z = EditorNode::get_singleton()->get_gui_base()->get_color("axis_z_color", "Editor");
|
||||||
|
cursor_colors.push_back(color_z);
|
||||||
|
cursor_colors.push_back(color_z);
|
||||||
|
cursor_colors.push_back(color_z.linear_interpolate(Color(0, 0, 0), 0.75));
|
||||||
|
cursor_colors.push_back(color_z.linear_interpolate(Color(0, 0, 0), 0.75));
|
||||||
|
|
||||||
Ref<SpatialMaterial> mat = memnew(SpatialMaterial);
|
Ref<SpatialMaterial> mat = memnew(SpatialMaterial);
|
||||||
mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true);
|
mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true);
|
||||||
|
|
|
@ -36,10 +36,41 @@
|
||||||
const float DEFAULT_GIZMO_EXTENTS = 10.0;
|
const float DEFAULT_GIZMO_EXTENTS = 10.0;
|
||||||
|
|
||||||
void Position2D::_draw_cross() {
|
void Position2D::_draw_cross() {
|
||||||
float extents = get_gizmo_extents();
|
const float extents = get_gizmo_extents();
|
||||||
// Colors taken from `axis_x_color` and `axis_y_color` (defined in `editor/editor_themes.cpp`)
|
|
||||||
draw_line(Point2(-extents, 0), Point2(+extents, 0), Color(0.96, 0.20, 0.32));
|
// Add more points to create a "hard stop" in the color gradient.
|
||||||
draw_line(Point2(0, -extents), Point2(0, +extents), Color(0.53, 0.84, 0.01));
|
Vector<Point2> points_x;
|
||||||
|
points_x.push_back(Point2(+extents, 0));
|
||||||
|
points_x.push_back(Point2());
|
||||||
|
points_x.push_back(Point2());
|
||||||
|
points_x.push_back(Point2(-extents, 0));
|
||||||
|
|
||||||
|
Vector<Point2> points_y;
|
||||||
|
points_y.push_back(Point2(0, +extents));
|
||||||
|
points_y.push_back(Point2());
|
||||||
|
points_y.push_back(Point2());
|
||||||
|
points_y.push_back(Point2(0, -extents));
|
||||||
|
|
||||||
|
// Use the axis color which is brighter for the positive axis.
|
||||||
|
// Use a darkened axis color for the negative axis.
|
||||||
|
// This makes it possible to see in which direction the Position3D node is rotated
|
||||||
|
// (which can be important depending on how it's used).
|
||||||
|
// Axis colors are taken from `axis_x_color` and `axis_y_color` (defined in `editor/editor_themes.cpp`).
|
||||||
|
Vector<Color> colors_x;
|
||||||
|
const Color color_x = Color(0.96, 0.20, 0.32);
|
||||||
|
colors_x.push_back(color_x);
|
||||||
|
colors_x.push_back(color_x);
|
||||||
|
colors_x.push_back(color_x.linear_interpolate(Color(0, 0, 0), 0.5));
|
||||||
|
colors_x.push_back(color_x.linear_interpolate(Color(0, 0, 0), 0.5));
|
||||||
|
draw_multiline_colors(points_x, colors_x);
|
||||||
|
|
||||||
|
Vector<Color> colors_y;
|
||||||
|
const Color color_y = Color(0.53, 0.84, 0.01);
|
||||||
|
colors_y.push_back(color_y);
|
||||||
|
colors_y.push_back(color_y);
|
||||||
|
colors_y.push_back(color_y.linear_interpolate(Color(0, 0, 0), 0.5));
|
||||||
|
colors_y.push_back(color_y.linear_interpolate(Color(0, 0, 0), 0.5));
|
||||||
|
draw_multiline_colors(points_y, colors_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
|
|
Loading…
Reference in a new issue