#version 330 core layout(location=0) in vec3 aPosition; layout(location=1) in vec3 aNormal; layout(location=2) in vec3 aDirection; uniform vec3 uChunkPosition; uniform vec3 uBodyOrigin; uniform float uRadius; uniform mat4 uViewProjection; uniform mat4 uBodyToWorld; uniform float uFar; uniform vec3 uMaterialAnchor; out vec3 vMaterial; out vec3 vBody; out vec3 vDirection; out vec3 vNormal; out vec3 vWorld; out float vFragDepth; void main() { vWorld=uChunkPosition+mat3(uBodyToWorld)*aPosition; vMaterial=aPosition+uMaterialAnchor; vBody=uBodyOrigin+aPosition/uRadius; vDirection=aDirection; vNormal=aNormal; vec4 clip=uViewProjection*vec4(vWorld,1); vFragDepth=clip.w+1.0; gl_Position=clip; gl_Position.z=(2.0*log2(max(.0001,vFragDepth))/log2(uFar+1.0)-1.0)*clip.w; }