uniform mat4 g_WorldViewProjectionMatrix; | |
attribute vec3 inPosition; | |
attribute vec4 inColor; | |
attribute vec4 inTexCoord; | |
varying vec4 color; | |
// z and w values in projection space | |
varying vec2 projPos; | |
varying vec2 vPos; // Position of the pixel in clip space | |
#ifdef USE_TEXTURE | |
varying vec4 texCoord; | |
#endif | |
#ifdef POINT_SPRITE | |
uniform mat4 g_WorldViewMatrix; | |
uniform mat4 g_WorldMatrix; | |
uniform vec3 g_CameraPosition; | |
uniform float m_Quadratic; | |
const float SIZE_MULTIPLIER = 4.0; | |
attribute float inSize; | |
#endif | |
void main(){ | |
vec4 pos = vec4(inPosition, 1.0); | |
gl_Position = g_WorldViewProjectionMatrix * pos; | |
color = inColor; | |
projPos = gl_Position.zw; | |
// projPos.x = 0.5 * (projPos.x) + 0.5; | |
// Transforms the vPosition data to the range [0,1] | |
vPos = (gl_Position.xy / gl_Position.w + 1.0) / 2.0; | |
#ifdef USE_TEXTURE | |
texCoord = inTexCoord; | |
#endif | |
#ifdef POINT_SPRITE | |
vec4 worldPos = g_WorldMatrix * pos; | |
float d = distance(g_CameraPosition.xyz, worldPos.xyz); | |
gl_PointSize = max(1.0, (inSize * SIZE_MULTIPLIER * m_Quadratic) / d); | |
//vec4 worldViewPos = g_WorldViewMatrix * pos; | |
//gl_PointSize = (inSize * SIZE_MULTIPLIER * m_Quadratic)*100.0 / worldViewPos.z; | |
color.a *= min(gl_PointSize, 1.0); | |
#endif | |
} |