diff options
author | Luca Rood <dev@lucarood.com> | 2017-06-06 10:56:27 +0300 |
---|---|---|
committer | Luca Rood <dev@lucarood.com> | 2017-06-06 10:57:18 +0300 |
commit | 4e1257f2d86d71cd883803ea15a1bcb44aa661c7 (patch) | |
tree | f7201276dfa51452483040c7ac2bf01846c623fb /source/blender/draw/modes/shaders/object_particle_dot_vert.glsl | |
parent | 443904f1f4f9f0b45e4ef10ec4b5c9392559ada0 (diff) |
Make particle size follow world space instead of screen space
Diffstat (limited to 'source/blender/draw/modes/shaders/object_particle_dot_vert.glsl')
-rw-r--r-- | source/blender/draw/modes/shaders/object_particle_dot_vert.glsl | 19 |
1 files changed, 13 insertions, 6 deletions
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 7b163dbdc31..6dfc212a776 100644 --- a/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl +++ b/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl @@ -1,6 +1,8 @@ -uniform mat4 ModelViewProjectionMatrix; -uniform int size; +uniform mat4 ModelViewMatrix; +uniform mat4 ProjectionMatrix; +uniform float pixel_size; +uniform float size; in vec3 pos; in float val; @@ -9,11 +11,14 @@ out vec4 radii; flat out float finalVal; void main() { - gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0); - gl_PointSize = size; + gl_Position = ModelViewMatrix * vec4(pos, 1.0); + + float psize = (ProjectionMatrix[3][3] == 0.0) ? (size / (-gl_Position.z * pixel_size)) : (size / pixel_size); + + gl_PointSize = psize; // calculate concentric radii in pixels - float radius = 0.5 * size; + float radius = 0.5 * psize; // start at the outside and progress toward the center radii[0] = radius; @@ -22,7 +27,9 @@ void main() { radii[3] = radius - 2.0; // convert to PointCoord units - radii /= size; + radii /= psize; + + gl_Position = ProjectionMatrix * gl_Position; finalVal = val; } |