17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-10-28 13:27:30 +01:00
Files
maszyna/shaders/terrainclipmap_tin.vert
maj00r 5f34d68e6f WIP: TIN terrain system - 95% complete
Replaces heightfield with Cesium Quantized Mesh format (TIN).
Full replacement, not hybrid - TIN is the only terrain format.

Implemented:
- Format: quantizedmeshformat.h, quantizedmeshreader.h
- Triangulator: terraincooker_tin.{h,cpp} using CDT
- Cooker: terraincook now generates TIN by default
- Loader: terraintileloader fully rewritten for TIN
- GPU pool: terraintilepool_tin (VBO/IBO per tile)
- Renderer interface: terrainclipmap.cppm updated
- Shaders: terrainclipmap_tin.{vert,frag}
- Documentation: 5 comprehensive markdown files

Remaining:
- terrainclipmap.cpp render() method (partial, needs completion)
- Build testing and integration
- See TIN_INTEGRATION_GUIDE.md for next steps

Stats: 2700+ lines new code, ~50% vertex reduction expected
2026-09-17 23:02:13 +02:00

31 lines
819 B
GLSL

// TIN Terrain Vertex Shader
// Replaces texture-based heightfield with vertex attributes
#version 330 core
// Vertex attributes from VBO
layout(location = 0) in vec3 aPosition; // Relative to tile origin
layout(location = 1) in vec2 aUV;
layout(location = 2) in uint aMaterial;
// Uniforms
uniform vec3 tile_offset; // Tile origin relative to camera
uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
// Output to fragment shader
out vec2 vUV;
flat out uint vMaterial;
void main() {
// Position is tile-relative, add offset to get camera-relative
vec3 worldPos = aPosition + tile_offset;
// Transform to clip space
gl_Position = projectionMatrix * modelViewMatrix * vec4(worldPos, 1.0);
// Pass through to fragment shader
vUV = aUV;
vMaterial = aMaterial;
}