Forráskód Böngészése

PointsMaterial: Add support uv attribute. (#25707)

Michael Herzog 2 éve
szülő
commit
c8549a524b

+ 9 - 1
src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js

@@ -1,7 +1,15 @@
 export default /* glsl */`
 #if defined( USE_MAP ) || defined( USE_ALPHAMAP )
 
-	vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;
+	#if defined( USE_POINTS_UV )
+
+		vec2 uv = vUv;
+
+	#else
+
+		vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;
+
+	#endif
 
 #endif
 

+ 10 - 2
src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js

@@ -1,7 +1,15 @@
 export default /* glsl */`
-#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
+#if defined( USE_POINTS_UV )
 
-	uniform mat3 uvTransform;
+	varying vec2 vUv;
+
+#else
+
+	#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
+
+		uniform mat3 uvTransform;
+
+	#endif
 
 #endif
 

+ 13 - 0
src/renderers/shaders/ShaderLib/points.glsl.js

@@ -9,8 +9,21 @@ uniform float scale;
 #include <logdepthbuf_pars_vertex>
 #include <clipping_planes_pars_vertex>
 
+#ifdef USE_POINTS_UV
+
+	varying vec2 vUv;
+	uniform mat3 uvTransform;
+
+#endif
+
 void main() {
 
+	#ifdef USE_POINTS_UV
+
+		vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
+
+	#endif
+
 	#include <color_vertex>
 	#include <morphcolor_vertex>
 	#include <begin_vertex>

+ 4 - 0
src/renderers/webgl/WebGLProgram.js

@@ -500,6 +500,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 			parameters.vertexUvs ? '#define USE_UV' : '',
 			parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',
 
+			parameters.pointsUvs ? '#define USE_POINTS_UV' : '',
+
 			parameters.flatShading ? '#define FLAT_SHADED' : '',
 
 			parameters.skinning ? '#define USE_SKINNING' : '',
@@ -661,6 +663,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 			parameters.vertexUvs ? '#define USE_UV' : '',
 			parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',
 
+			parameters.pointsUvs ? '#define USE_POINTS_UV' : '',
+
 			parameters.gradientMap ? '#define USE_GRADIENTMAP' : '',
 
 			parameters.flatShading ? '#define FLAT_SHADED' : '',

+ 4 - 0
src/renderers/webgl/WebGLPrograms.js

@@ -179,6 +179,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
 			vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheenColorMap || !! material.sheenRoughnessMap,
 			uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || material.sheen > 0 || !! material.sheenColorMap || !! material.sheenRoughnessMap ) && !! material.displacementMap,
 
+			pointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( !! material.map || !! material.alphaMap ),
+
 			fog: !! fog,
 			useFog: material.fog === true,
 			fogExp2: ( fog && fog.isFogExp2 ),
@@ -440,6 +442,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
 			_programLayers.enable( 23 );
 		if ( parameters.opaque )
 			_programLayers.enable( 24 );
+		if ( parameters.pointsUvs )
+			_programLayers.enable( 25 );
 
 		array.push( _programLayers.mask );