diff options
author | Luca Rood <dev@lucarood.com> | 2017-05-23 17:56:53 +0300 |
---|---|---|
committer | Luca Rood <dev@lucarood.com> | 2017-05-23 19:39:22 +0300 |
commit | 9bc88b69d81fc1839733c0ffb7179fba22d9920c (patch) | |
tree | 81f49b619b93ba1ea28341865e85b75bcbdbec50 /source/blender/draw/modes/shaders | |
parent | 99c6601a1ffe744ef8592de5da5920156a1097a6 (diff) |
Implement particle velocity and acceleration visualization
Diffstat (limited to 'source/blender/draw/modes/shaders')
4 files changed, 33 insertions, 3 deletions
diff --git a/source/blender/draw/modes/shaders/object_particle_dot_frag.glsl b/source/blender/draw/modes/shaders/object_particle_dot_frag.glsl index 044a949ef98..e8bf7884701 100644 --- a/source/blender/draw/modes/shaders/object_particle_dot_frag.glsl +++ b/source/blender/draw/modes/shaders/object_particle_dot_frag.glsl @@ -1,8 +1,11 @@ uniform vec3 color; uniform vec3 outlineColor; +uniform sampler1D ramp; in vec4 radii; +flat in float finalVal; + out vec4 fragColor; void main() { @@ -23,11 +26,23 @@ void main() { float midStroke = 0.5 * (radii[1] + radii[2]); if (dist > midStroke) { - fragColor.rgb = outlineColor; + if (finalVal < 0.0) { + fragColor.rgb = outlineColor; + } + else { + fragColor.rgb = texture(ramp, finalVal).rgb; + } + fragColor.a = mix(1.0, 0.0, smoothstep(radii[1], radii[0], dist)); } else { - fragColor.rgb = mix(color, outlineColor, smoothstep(radii[3], radii[2], dist)); + if (finalVal < 0.0) { + fragColor.rgb = mix(color, outlineColor, smoothstep(radii[3], radii[2], dist)); + } + else { + fragColor.rgb = texture(ramp, finalVal).rgb; + } + fragColor.a = 1.0; } diff --git a/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl b/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl index 36b665173f1..7b163dbdc31 100644 --- a/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl +++ b/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl @@ -3,7 +3,10 @@ uniform mat4 ModelViewProjectionMatrix; uniform int size; in vec3 pos; +in float val; + out vec4 radii; +flat out float finalVal; void main() { gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0); @@ -20,4 +23,6 @@ void main() { // convert to PointCoord units radii /= size; + + finalVal = val; } diff --git a/source/blender/draw/modes/shaders/object_particle_prim_frag.glsl b/source/blender/draw/modes/shaders/object_particle_prim_frag.glsl index 791d38390a2..0e58d70b69b 100644 --- a/source/blender/draw/modes/shaders/object_particle_prim_frag.glsl +++ b/source/blender/draw/modes/shaders/object_particle_prim_frag.glsl @@ -1,14 +1,21 @@ uniform vec3 color; +uniform sampler1D ramp; flat in int finalAxis; +flat in float finalVal; out vec4 fragColor; void main() { if (finalAxis == -1) { - fragColor.rgb = color; + if (finalVal < 0.0) { + fragColor.rgb = color; + } + else { + fragColor.rgb = texture(ramp, finalVal).rgb; + } } else { fragColor.rgb = vec3(0.0); diff --git a/source/blender/draw/modes/shaders/object_particle_prim_vert.glsl b/source/blender/draw/modes/shaders/object_particle_prim_vert.glsl index ff16f61b884..7b328c73de3 100644 --- a/source/blender/draw/modes/shaders/object_particle_prim_vert.glsl +++ b/source/blender/draw/modes/shaders/object_particle_prim_vert.glsl @@ -9,10 +9,12 @@ uniform int draw_size; in vec3 pos; in vec4 rot; +in float val; in vec3 inst_pos; in int axis; flat out int finalAxis; +flat out float finalVal; vec3 rotate(vec3 vec, vec4 quat) { @@ -46,4 +48,5 @@ void main() } finalAxis = axis; + finalVal = val; } |