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
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2019-05-09 16:31:54 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-05-10 13:14:41 +0300
commitfdddea676d4fa40668ca82f8ccc5106437d113f2 (patch)
tree2413100e26a03fad62c7e1b7f824916596149052 /source/blender/draw/modes/shaders/common_view_lib.glsl
parent196dbc0f314e466d1a1a1d9ac93238553fdfe66e (diff)
Cleanup: DRW: Renaming of glsl utility macros
Diffstat (limited to 'source/blender/draw/modes/shaders/common_view_lib.glsl')
-rw-r--r--source/blender/draw/modes/shaders/common_view_lib.glsl39
1 files changed, 31 insertions, 8 deletions
diff --git a/source/blender/draw/modes/shaders/common_view_lib.glsl b/source/blender/draw/modes/shaders/common_view_lib.glsl
index 50d6760cafa..40c43856b43 100644
--- a/source/blender/draw/modes/shaders/common_view_lib.glsl
+++ b/source/blender/draw/modes/shaders/common_view_lib.glsl
@@ -14,11 +14,34 @@ layout(std140) uniform viewBlock
vec4 clipPlanes[2];
};
-/* Transform shortcuts. */
-#define transform_normal_object_to_world(nor) (transpose(mat3(ModelMatrixInverse)) * nor)
-#define transform_normal_world_to_object(nor) (transpose(mat3(ModelMatrix)) * nor)
-#define transform_normal_world_to_view(nor) (transpose(mat3(ViewMatrixInverse)) * nor)
-#define transform_normal_object_to_view(nor) \
- (transpose(mat3(ViewMatrixInverse)) * (transpose(mat3(ModelMatrixInverse)) * nor))
-#define transform_point_view_to_object(point) \
- ((ModelMatrixInverse * (ViewMatrixInverse * vec4(point, 1.0))).xyz)
+ /** Transform shortcuts. */
+ /* Rule of thumb: Try to reuse world positions and normals because converting though viewspace
+ * will always be decomposed in at least 2 matrix operation. */
+
+ /**
+ * Some clarification:
+ * Usually Normal matrix is transpose(inverse(ViewMatrix * ModelMatrix))
+ *
+ * But since it is slow to multiply matrices we decompose it. Decomposing
+ * inversion and transposition both invert the product order leaving us with
+ * the same original order:
+ * transpose(ViewMatrixInverse) * transpose(ModelMatrixInverse)
+ *
+ * Knowing that the view matrix is orthogonal, the transpose is also the inverse.
+ * Note: This is only valid because we are only using the mat3 of the ViewMatrixInverse.
+ * ViewMatrix * transpose(ModelMatrixInverse)
+ **/
+#define normal_object_to_view(nor) (mat3(ViewMatrix) * normal_object_to_world(nor))
+#define normal_object_to_world(nor) (transpose(mat3(ModelMatrixInverse)) * nor)
+#define normal_world_to_object(nor) (transpose(mat3(ModelMatrix)) * nor)
+#define normal_world_to_view(nor) (mat3(ViewMatrix) * nor)
+
+#define point_object_to_ndc(point) (ViewProjectionMatrix * (ModelMatrix * vec4(pt, 1.0)))
+#define point_object_to_view(point) ((ViewMatrix * (ModelMatrix * vec4(pt, 1.0))).xyz)
+#define point_object_to_world(point) ((ModelMatrix * vec4(point, 1.0)).xyz)
+#define point_view_to_ndc(point) (ProjectionMatrix * vec4(point, 1.0))
+#define point_view_to_object(point) ((ModelMatrixInverse * (ViewMatrixInverse * vec4(pt, 1.))).xyz)
+#define point_view_to_world(point) ((ViewMatrixInverse * vec4(point, 1.0)).xyz)
+#define point_world_to_ndc(point) (ViewProjectionMatrix * vec4(point, 1.0))
+#define point_world_to_object(point) ((ModelMatrixInverse * vec4(point, 1.0)).xyz)
+#define point_world_to_view(point) ((ViewMatrix * vec4(point, 1.0)).xyz)