From 847c091ae838a0e5268fc327dac931c810d88d9b Mon Sep 17 00:00:00 2001 From: Charlie Jolly Date: Tue, 25 Feb 2020 14:52:01 +0000 Subject: Shading: Add invert option to Vector Rotate Node Checkbox to invert rotation angle, suggested by @simonthommes Differential Revision: https://developer.blender.org/D6932 --- .../material/gpu_shader_material_vector_rotate.glsl | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'source/blender/gpu') diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_vector_rotate.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_vector_rotate.glsl index 405821e01e3..41ad16cce0b 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_vector_rotate.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_vector_rotate.glsl @@ -20,33 +20,34 @@ vec3 rotate_around_axis(vec3 p, vec3 axis, float angle) } void node_vector_rotate_axis_angle( - vec3 vector_in, vec3 center, vec3 axis, float angle, vec3 rotation, out vec3 vec) + vec3 vector_in, vec3 center, vec3 axis, float angle, vec3 rotation, float invert, out vec3 vec) { vec = (length(axis) != 0.0) ? - rotate_around_axis(vector_in - center, normalize(axis), angle) + center : + rotate_around_axis(vector_in - center, normalize(axis), angle * invert) + center : vector_in; } void node_vector_rotate_axis_x( - vec3 vector_in, vec3 center, vec3 axis, float angle, vec3 rotation, out vec3 vec) + vec3 vector_in, vec3 center, vec3 axis, float angle, vec3 rotation, float invert, out vec3 vec) { - vec = rotate_around_axis(vector_in - center, vec3(1.0, 0.0, 0.0), angle) + center; + vec = rotate_around_axis(vector_in - center, vec3(1.0, 0.0, 0.0), angle * invert) + center; } void node_vector_rotate_axis_y( - vec3 vector_in, vec3 center, vec3 axis, float angle, vec3 rotation, out vec3 vec) + vec3 vector_in, vec3 center, vec3 axis, float angle, vec3 rotation, float invert, out vec3 vec) { - vec = rotate_around_axis(vector_in - center, vec3(0.0, 1.0, 0.0), angle) + center; + vec = rotate_around_axis(vector_in - center, vec3(0.0, 1.0, 0.0), angle * invert) + center; } void node_vector_rotate_axis_z( - vec3 vector_in, vec3 center, vec3 axis, float angle, vec3 rotation, out vec3 vec) + vec3 vector_in, vec3 center, vec3 axis, float angle, vec3 rotation, float invert, out vec3 vec) { - vec = rotate_around_axis(vector_in - center, vec3(0.0, 0.0, 1.0), angle) + center; + vec = rotate_around_axis(vector_in - center, vec3(0.0, 0.0, 1.0), angle * invert) + center; } void node_vector_rotate_euler_xyz( - vec3 vector_in, vec3 center, vec3 axis, float angle, vec3 rotation, out vec3 vec) + vec3 vector_in, vec3 center, vec3 axis, float angle, vec3 rotation, float invert, out vec3 vec) { - vec = euler_to_mat3(rotation) * (vector_in - center) + center; + mat3 rmat = (invert < 0.0) ? transpose(euler_to_mat3(rotation)) : euler_to_mat3(rotation); + vec = rmat * (vector_in - center) + center; } -- cgit v1.2.3