#version 330 core layout(location=0) in vec3 aPosition; layout(location=1) in vec3 aColor; layout(location=2) in float aSize; uniform vec3 uOrigin; uniform vec3 uAxisX; uniform vec3 uAxisY; uniform vec3 uAxisZ; uniform vec3 uForward; uniform vec3 uRight; uniform vec3 uUp; uniform float uAspect; uniform float uTanHalfFov; uniform float uNearFade; out vec3 vColor; void main(){ vec3 delta=uAxisX*aPosition.x+uAxisY*aPosition.y+uAxisZ*aPosition.z-uOrigin; float d=length(delta),z=dot(delta,uForward); vec2 xy=vec2(dot(delta,uRight)/uAspect,dot(delta,uUp))/uTanHalfFov; gl_Position=z>0.0?vec4(xy,z*.999999,z):vec4(2,2,2,1); gl_PointSize=clamp(aSize,1.0,4.5); vColor=aColor*smoothstep(uNearFade,uNearFade*2.0,d); }