Browse Source

WebGLRenderer: Added shader programs for sprites

Mugen87 7 years ago
parent
commit
8df062ffb9

+ 28 - 0
src/renderers/shaders/ShaderLib/sprite_frag.glsl

@@ -0,0 +1,28 @@
+uniform vec3 diffuse;
+uniform float opacity;
+
+#include <common>
+#include <packing>
+#include <uv_pars_fragment>
+#include <map_pars_fragment>
+#include <fog_pars_fragment>
+#include <logdepthbuf_pars_fragment>
+#include <clipping_planes_pars_fragment>
+
+void main() {
+
+	vec3 outgoingLight = vec3( 0.0 );
+	vec4 diffuseColor = vec4( diffuse, opacity );
+
+	#include <clipping_planes_fragment>
+	#include <logdepthbuf_fragment>
+	#include <map_fragment>
+	#include <alphatest_fragment>
+
+	outgoingLight = diffuseColor.rgb;
+
+	gl_FragColor = vec4( outgoingLight, diffuseColor.a );
+
+	#include <fog_fragment>
+
+}

+ 35 - 0
src/renderers/shaders/ShaderLib/sprite_vert.glsl

@@ -0,0 +1,35 @@
+uniform float rotation;
+uniform vec2 center;
+
+#include <common>
+#include <uv_pars_vertex>
+#include <fog_pars_vertex>
+#include <logdepthbuf_pars_vertex>
+#include <clipping_planes_pars_vertex>
+
+void main() {
+
+	#include <uv_vertex>
+
+	vec2 scale;
+	scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
+	scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );
+
+	vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;
+
+	vec2 rotatedPosition;
+	rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
+	rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;
+
+	vec4 mvPosition;
+
+	mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
+	mvPosition.xy += rotatedPosition;
+
+	gl_Position = projectionMatrix * mvPosition;
+
+	#include <logdepthbuf_vertex>
+	#include <clipping_planes_vertex>
+	#include <fog_vertex>
+
+}