| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #version 300 es
- uniform vec4 colorDead;
- uniform mat4 view;
- uniform mat4 projection;
- // Particles state
- in vec3 position;
- in float age;
- in float life;
- in vec3 size;
- in vec4 color;
- in vec2 offset;
- in vec2 uv;
- in vec2 angle;
- out vec2 vUV;
- out vec4 vColor;
- #ifdef CLIPPLANE
- uniform vec4 vClipPlane;
- uniform mat4 invView;
- out float fClipDistance;
- #endif
- void main() {
- vUV = uv;
- float ratio = age / life;
- vColor = color * vec4(1.0 - ratio) + colorDead * vec4(ratio);
- vec2 cornerPos = offset * size.yz * size.x;
- // Rotate
- vec4 rotatedCorner;
- rotatedCorner.x = cornerPos.x * cos(angle.x) - cornerPos.y * sin(angle.x);
- rotatedCorner.y = cornerPos.x * sin(angle.x) + cornerPos.y * cos(angle.x);
- rotatedCorner.z = 0.;
- rotatedCorner.w = 0.;
- // Expand position
- vec4 viewPosition = view * vec4(position, 1.0);
- gl_Position = projection * (viewPosition + rotatedCorner);
- // Clip plane
- #ifdef CLIPPLANE
- vec4 worldPos = invView * viewPosition;
- fClipDistance = dot(worldPos, vClipPlane);
- #endif
- }
|