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

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfieldOfView <aldo@fieldofview.com>2018-03-13 13:54:32 +0300
committerfieldOfView <aldo@fieldofview.com>2018-03-13 14:14:05 +0300
commit0caea24afcb8d94fbf32ef330a0d2cc6788be16f (patch)
tree75ea004c6d475c5b3ea0b27399940f3730740eff /resources/shaders
parentf40e9bffa9aeee2e312fbe4cbe5cab7bfa8189f6 (diff)
Add depth pass for picking a location
Diffstat (limited to 'resources/shaders')
-rw-r--r--resources/shaders/camera_distance.shader83
1 files changed, 83 insertions, 0 deletions
diff --git a/resources/shaders/camera_distance.shader b/resources/shaders/camera_distance.shader
new file mode 100644
index 0000000000..2dd90e7f15
--- /dev/null
+++ b/resources/shaders/camera_distance.shader
@@ -0,0 +1,83 @@
+[shaders]
+vertex =
+ uniform highp mat4 u_modelMatrix;
+ uniform highp mat4 u_viewProjectionMatrix;
+
+ attribute highp vec4 a_vertex;
+
+ varying highp vec3 v_vertex;
+
+ void main()
+ {
+ vec4 world_space_vert = u_modelMatrix * a_vertex;
+ gl_Position = u_viewProjectionMatrix * world_space_vert;
+
+ v_vertex = world_space_vert.xyz;
+ }
+
+fragment =
+ uniform highp vec3 u_viewPosition;
+
+ varying highp vec3 v_vertex;
+
+ void main()
+ {
+ highp float distance_to_camera = distance(v_vertex, u_viewPosition) * 1000.; // distance in micron
+
+ vec3 encoded; // encode float into 3 8-bit channels; this gives a precision of a micron at a range of up to ~16 meter
+ encoded.b = floor(distance_to_camera / 65536.0);
+ encoded.g = floor((distance_to_camera - encoded.b * 65536.0) / 256.0);
+ encoded.r = floor(distance_to_camera - encoded.b * 65536.0 - encoded.g * 256.0);
+
+ gl_FragColor.rgb = encoded / 255.;
+ gl_FragColor.a = 1.0;
+ }
+
+vertex41core =
+ #version 410
+ uniform highp mat4 u_modelMatrix;
+ uniform highp mat4 u_viewProjectionMatrix;
+
+ in highp vec4 a_vertex;
+
+ out highp vec3 v_vertex;
+
+ void main()
+ {
+ vec4 world_space_vert = u_modelMatrix * a_vertex;
+ gl_Position = u_viewProjectionMatrix * world_space_vert;
+
+ v_vertex = world_space_vert.xyz;
+ }
+
+fragment41core =
+ #version 410
+ uniform highp vec3 u_viewPosition;
+
+ in highp vec3 v_vertex;
+
+ out vec4 frag_color;
+
+ void main()
+ {
+ highp float distance_to_camera = distance(v_vertex, u_viewPosition) * 1000.; // distance in micron
+
+ vec3 encoded; // encode float into 3 8-bit channels; this gives a precision of a micron at a range of up to ~16 meter
+ encoded.b = floor(distance_to_camera / 65536.0);
+ encoded.g = floor((distance_to_camera - encoded.b * 65536.0) / 256.0);
+ encoded.r = floor(distance_to_camera - encoded.b * 65536.0 - encoded.g * 256.0);
+
+ frag_color.rgb = encoded / 255.;
+ frag_color.a = 1.0;
+ }
+
+[defaults]
+
+[bindings]
+u_modelMatrix = model_matrix
+u_viewProjectionMatrix = view_projection_matrix
+u_normalMatrix = normal_matrix
+u_viewPosition = view_position
+
+[attributes]
+a_vertex = vertex