瀏覽代碼

Merge pull request #18364 from njarraud/dev

Node materials to handle more than 2 uv layers
Michael Herzog 6 年之前
父節點
當前提交
c231818415
共有 2 個文件被更改,包括 13 次插入12 次删除
  1. 2 4
      examples/jsm/nodes/accessors/UVNode.js
  2. 11 8
      examples/jsm/nodes/core/NodeBuilder.js

+ 2 - 4
examples/jsm/nodes/accessors/UVNode.js

@@ -5,9 +5,6 @@
 import { TempNode } from '../core/TempNode.js';
 import { NodeLib } from '../core/NodeLib.js';
 
-var vertexDict = [ 'uv', 'uv2' ],
-	fragmentDict = [ 'vUv', 'vUv2' ];
-
 function UVNode( index ) {
 
 	TempNode.call( this, 'v2', { shared: false } );
@@ -24,7 +21,8 @@ UVNode.prototype.generate = function ( builder, output ) {
 
 	builder.requires.uv[ this.index ] = true;
 
-	var result = builder.isShader( 'vertex' ) ? vertexDict[ this.index ] : fragmentDict[ this.index ];
+	var uvIndex = this.index > 0 ? this.index + 1 : '';
+	var result = builder.isShader( 'vertex' ) ? 'uv' + uvIndex : 'vUv' + uvIndex;
 
 	return builder.format( result, this.getType( builder ), output );
 

+ 11 - 8
examples/jsm/nodes/core/NodeBuilder.js

@@ -164,20 +164,23 @@ NodeBuilder.prototype = {
 		this.buildShader( 'vertex', vertex );
 		this.buildShader( 'fragment', fragment );
 
-		if ( this.requires.uv[ 0 ] ) {
+		for ( var i = 0; i < this.requires.uv.length; i++ ) {
 
-			this.addVaryCode( 'varying vec2 vUv;' );
+			if ( this.requires.uv[ i ] ) {
 
-			this.addVertexFinalCode( 'vUv = uv;' );
+				var uvIndex = i > 0 ? i + 1 : '';
 
-		}
+				this.addVaryCode( 'varying vec2 vUv' + uvIndex + ';' );
+
+				if ( i > 0 ) {
 
-		if ( this.requires.uv[ 1 ] ) {
+					this.addVertexParsCode( 'attribute vec2 uv' + uvIndex + ';' );
 
-			this.addVaryCode( 'varying vec2 vUv2;' );
-			this.addVertexParsCode( 'attribute vec2 uv2;' );
+				}
 
-			this.addVertexFinalCode( 'vUv2 = uv2;' );
+				this.addVertexFinalCode( 'vUv' + uvIndex + ' = uv' + uvIndex +';' );
+
+			}
 
 		}