2026-02-02 12:24:50 -08:00
|
|
|
#version 330 core
|
|
|
|
|
|
|
|
|
|
layout(location = 0) in vec3 aPosition;
|
|
|
|
|
layout(location = 1) in vec3 aNormal;
|
|
|
|
|
layout(location = 2) in vec2 aTexCoord;
|
|
|
|
|
layout(location = 3) in vec2 aLayerUV;
|
|
|
|
|
|
|
|
|
|
out vec3 FragPos;
|
|
|
|
|
out vec3 Normal;
|
|
|
|
|
out vec2 TexCoord;
|
|
|
|
|
out vec2 LayerUV;
|
|
|
|
|
|
|
|
|
|
uniform mat4 uModel;
|
|
|
|
|
uniform mat4 uView;
|
|
|
|
|
uniform mat4 uProjection;
|
|
|
|
|
|
|
|
|
|
void main() {
|
|
|
|
|
vec4 worldPos = uModel * vec4(aPosition, 1.0);
|
|
|
|
|
FragPos = worldPos.xyz;
|
|
|
|
|
|
2026-02-02 23:03:45 -08:00
|
|
|
// Terrain uses identity model matrix, so normal passes through directly
|
|
|
|
|
Normal = aNormal;
|
2026-02-02 12:24:50 -08:00
|
|
|
|
|
|
|
|
TexCoord = aTexCoord;
|
|
|
|
|
LayerUV = aLayerUV;
|
|
|
|
|
|
|
|
|
|
gl_Position = uProjection * uView * worldPos;
|
|
|
|
|
}
|