uniform mat4 g_WorldViewProjectionMatrix; | |
attribute vec3 inPosition; | |
attribute vec4 inColor; | |
attribute vec4 inTexCoord; | |
varying vec4 color; | |
#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; | |
#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 | |
} |