blob: c9d2955ab1742d81cb0eb672b9f5800af0dd244e (
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
26
27
28
|
#include "grass_vert.h"
const char* shader_grass_vert = "attribute vec2 position; // Local quad vertex: x in [-0.5, 0.5], y in [0, 1] \n"
"attribute vec3 instancePos; // Per-instance: world-space base of blade \n"
"attribute float instancePhase; // Per-instance: random phase offset for sway \n"
"attribute float instanceHeight; // Per-instance: height scale multiplier \n"
" \n"
"uniform mat4 projection; \n"
"uniform mat4 view; \n"
"uniform float time; \n"
"uniform float bladeWidth; \n"
"uniform float bladeHeight; \n"
"uniform float swayAmount; \n"
" \n"
"varying lowp vec2 vUV; \n"
" \n"
"void main() { \n"
" vec3 cameraRight = vec3(view[0][0], view[1][0], view[2][0]); \n"
" float h = bladeHeight * instanceHeight; \n"
" float sway = sin(time * 1.5 + instancePhase) * swayAmount * position.y; \n"
" vec3 worldPos = instancePos \n"
" + cameraRight * (position.x + sway) * bladeWidth \n"
" + vec3(0.0, 1.0, 0.0) * position.y * h; \n"
" \n"
" gl_Position = projection * view * vec4(worldPos, 1.0); \n"
" vUV = vec2(position.x + 0.5, position.y); \n"
"} \n"
" \n";
|