blob: 0cf0285d16168cd0be28aede953ea6d976c458a7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
attribute vec2 position; // Local quad vertex: x in [-0.5, 0.5], y in [0, 1]
attribute vec3 instancePos; // Per-instance: world-space base of blade
attribute float instancePhase; // Per-instance: random phase offset for sway
attribute float instanceHeight; // Per-instance: height scale multiplier
uniform mat4 projection;
uniform mat4 view;
uniform float time;
uniform float bladeWidth;
uniform float bladeHeight;
uniform float swayAmount;
varying lowp vec2 vUV;
void main() {
vec3 cameraRight = vec3(view[0][0], view[1][0], view[2][0]);
float h = bladeHeight * instanceHeight;
float sway = sin(time * 1.5 + instancePhase) * swayAmount * position.y;
vec3 worldPos = instancePos
+ cameraRight * (position.x + sway) * bladeWidth
+ vec3(0.0, 1.0, 0.0) * position.y * h;
gl_Position = projection * view * vec4(worldPos, 1.0);
vUV = vec2(position.x + 0.5, position.y);
}
|