particle.glsl 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. //@renderpasses 2,6,10
  2. //@import "std"
  3. //material uniforms
  4. //
  5. uniform sampler2D m_ColorTexture;
  6. uniform vec4 m_ColorFactor;
  7. //buffer uniforms
  8. //
  9. uniform vec3 x_Gravity; //gravity of particle
  10. uniform float x_Duration; //duration of particle
  11. uniform float x_Fade; //start fade out time
  12. //@vertex
  13. void main(){
  14. float t=(r_Time-a_TexCoord0.s);
  15. float a=1.0-clamp( (t-x_Fade)/(x_Duration-x_Fade),0.0,1.0 );
  16. v_Color=m_ColorFactor * vec4( a_Tangent.rgb,a_Tangent.a * a * i_Alpha );
  17. vec4 position=i_ModelMatrix * vec4( a_Position.xyz * t,1.0 );
  18. position.xyz+=x_Gravity * t * t * .5;
  19. position=r_ViewMatrix * position;
  20. v_Position=position.xyz;
  21. gl_Position=r_ProjectionMatrix * position;
  22. gl_PointSize=a_TexCoord0.t/gl_Position.w;
  23. }
  24. //@fragment
  25. void main(){
  26. vec4 color=texture2D( m_ColorTexture,gl_PointCoord );
  27. float alpha=color.a * v_Color.a;
  28. vec3 frag=pow( color.rgb,vec3( 2.2 ) ) * v_Color.rgb;
  29. float fog=clamp( (length( v_Position )-r_FogNear)/(r_FogFar-r_FogNear),0.0,1.0 ) * r_FogColor.a;
  30. frag=mix( frag,r_FogColor.rgb,fog );
  31. frag*=alpha;
  32. #if defined( MX2_SRGBOUTPUT )
  33. gl_FragColor=vec4( pow( frag,vec3( 1.0/2.2 ) ),alpha );
  34. #else
  35. gl_FragColor=vec4( frag,alpha );
  36. #endif
  37. }