소스 검색

Merge branch 'mat3-uniforms' of https://github.com/rtsao/three.js into dev

Mr.doob 11 년 전
부모
커밋
340f736565
2개의 변경된 파일57개의 추가작업 그리고 0개의 파일을 삭제
  1. 30 0
      src/math/Matrix3.js
  2. 27 0
      src/renderers/WebGLRenderer.js

+ 30 - 0
src/math/Matrix3.js

@@ -187,6 +187,36 @@ THREE.Matrix3.prototype = {
 
 	},
 
+	flattenToArray: function ( flat ) {
+
+		var te = this.elements;
+		flat[ 0 ] = te[0]; flat[ 1 ] = te[1]; flat[ 2 ] = te[2];
+		flat[ 3 ] = te[3]; flat[ 4 ] = te[4]; flat[ 5 ] = te[5]; 
+		flat[ 6 ] = te[6]; flat[ 7 ] = te[7]; flat[ 8 ] = te[8];
+
+		return flat;
+
+	},
+
+	flattenToArrayOffset: function( flat, offset ) {
+
+		var te = this.elements;
+		flat[ offset ] = te[0];
+		flat[ offset + 1 ] = te[1];
+		flat[ offset + 2 ] = te[2];
+		
+		flat[ offset + 3 ] = te[3];
+		flat[ offset + 4 ] = te[4];
+		flat[ offset + 5 ] = te[5];
+		
+		flat[ offset + 6 ] = te[6];
+		flat[ offset + 7 ] = te[7];
+		flat[ offset + 8 ]  = te[8];
+
+		return flat;
+
+	},
+
 	getNormalMatrix: function ( m ) {
 
 		// input: THREE.Matrix4

+ 27 - 0
src/renderers/WebGLRenderer.js

@@ -4855,6 +4855,33 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 				_gl.uniform4fv( location, uniform._array );
 
+			} else if ( type === "m3") { // single THREE.Matrix3
+
+				if ( uniform._array === undefined ) {
+
+					uniform._array = new Float32Array( 9 );
+
+				}
+
+				value.flattenToArray( uniform._array );
+				_gl.uniformMatrix3fv( location, false, uniform._array );
+
+			} else if ( type === "m3v" ) { // array of THREE.Matrix3
+
+				if ( uniform._array === undefined ) {
+
+					uniform._array = new Float32Array( 9 * value.length );
+
+				}
+
+				for ( i = 0, il = value.length; i < il; i ++ ) {
+
+					value[ i ].flattenToArrayOffset( uniform._array, i * 9 );
+
+				}
+
+				_gl.uniformMatrix3fv( location, false, uniform._array );
+
 			} else if ( type === "m4") { // single THREE.Matrix4
 
 				if ( uniform._array === undefined ) {