diff options
Diffstat (limited to 'source/blender/gpu/shaders/material/gpu_shader_material_mapping.glsl')
-rw-r--r-- | source/blender/gpu/shaders/material/gpu_shader_material_mapping.glsl | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_mapping.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_mapping.glsl new file mode 100644 index 00000000000..07f152439fe --- /dev/null +++ b/source/blender/gpu/shaders/material/gpu_shader_material_mapping.glsl @@ -0,0 +1,27 @@ +void mapping_mat4( + vec3 vec, vec4 m0, vec4 m1, vec4 m2, vec4 m3, vec3 minvec, vec3 maxvec, out vec3 outvec) +{ + mat4 mat = mat4(m0, m1, m2, m3); + outvec = (mat * vec4(vec, 1.0)).xyz; + outvec = clamp(outvec, minvec, maxvec); +} + +void mapping_point(vec3 vector, vec3 location, vec3 rotation, vec3 scale, out vec3 result) +{ + result = (euler_to_mat3(rotation) * (vector * scale)) + location; +} + +void mapping_texture(vec3 vector, vec3 location, vec3 rotation, vec3 scale, out vec3 result) +{ + result = safe_divide(transpose(euler_to_mat3(rotation)) * (vector - location), scale); +} + +void mapping_vector(vec3 vector, vec3 location, vec3 rotation, vec3 scale, out vec3 result) +{ + result = euler_to_mat3(rotation) * (vector * scale); +} + +void mapping_normal(vec3 vector, vec3 location, vec3 rotation, vec3 scale, out vec3 result) +{ + result = normalize(euler_to_mat3(rotation) * safe_divide(vector, scale)); +} |