Преглед изворни кода

Merge branch 'dev' of https://github.com/mrdoob/three.js into dev

Neha Agarwal пре 10 година
родитељ
комит
96f44e8fa3

Разлика између датотеке није приказан због своје велике величине
+ 175 - 9
build/three.js


Разлика између датотеке није приказан због своје велике величине
+ 174 - 168
build/three.min.js


+ 46 - 61
examples/webgl_modifier_tessellation.html

@@ -64,7 +64,7 @@
 				vNormal = normal;
 				vNormal = normal;
 				vColor = customColor;
 				vColor = customColor;
 
 
-				vec3 newPosition = position + amplitude * displacement;
+				vec3 newPosition = position + normal * amplitude * displacement;
 				gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );
 				gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );
 
 
 			}
 			}
@@ -78,7 +78,7 @@
 
 
 			void main() {
 			void main() {
 
 
-				const float ambient = 0.005;
+				const float ambient = 0.4;
 
 
 				vec3 light = vec3( 1.0 );
 				vec3 light = vec3( 1.0 );
 				light = normalize( light );
 				light = normalize( light );
@@ -86,7 +86,6 @@
 				float directional = max( dot( vNormal, light ), 0.0 );
 				float directional = max( dot( vNormal, light ), 0.0 );
 
 
 				gl_FragColor = vec4( ( directional + ambient ) * vColor, 1.0 );
 				gl_FragColor = vec4( ( directional + ambient ) * vColor, 1.0 );
-				gl_FragColor.xyz = sqrt( gl_FragColor.xyz );
 
 
 			}
 			}
 
 
@@ -109,8 +108,8 @@
 
 
 		function init() {
 		function init() {
 
 
-			camera = new THREE.PerspectiveCamera( 25, WIDTH / HEIGHT, 1, 10000 );
-			camera.position.z = 350;
+			camera = new THREE.PerspectiveCamera( 40, WIDTH / HEIGHT, 1, 10000 );
+			camera.position.set( -100, 100, 200 );
 
 
 			controls = new THREE.TrackballControls( camera );
 			controls = new THREE.TrackballControls( camera );
 
 
@@ -118,31 +117,6 @@
 
 
 			//
 			//
 
 
-			attributes = {
-
-				displacement: {	type: 'v3', value: [] },
-				customColor:  {	type: 'c', value: [] }
-
-			};
-
-			uniforms = {
-
-				amplitude: { type: "f", value: 0.0 }
-
-			};
-
-			var shaderMaterial = new THREE.ShaderMaterial( {
-
-				uniforms: 		uniforms,
-				attributes:     attributes,
-				vertexShader:   document.getElementById( 'vertexshader' ).textContent,
-				fragmentShader: document.getElementById( 'fragmentshader' ).textContent,
-				shading: 		THREE.FlatShading,
-				side: 			THREE.DoubleSide
-
-			});
-
-
 			var geometry = new THREE.TextGeometry( "THREE.JS", {
 			var geometry = new THREE.TextGeometry( "THREE.JS", {
 
 
 				size: 40,
 				size: 40,
@@ -159,8 +133,6 @@
 
 
 			});
 			});
 
 
-			geometry.dynamic = true;
-
 			geometry.center();
 			geometry.center();
 
 
 			var tessellateModifier = new THREE.TessellateModifier( 8 );
 			var tessellateModifier = new THREE.TessellateModifier( 8 );
@@ -174,57 +146,68 @@
 			var explodeModifier = new THREE.ExplodeModifier();
 			var explodeModifier = new THREE.ExplodeModifier();
 			explodeModifier.modify( geometry );
 			explodeModifier.modify( geometry );
 
 
-			var vertices = geometry.vertices;
+			var numFaces = geometry.faces.length;
+
+			//
+
+			geometry = new THREE.BufferGeometry().fromGeometry( geometry );
 
 
-			var colors = attributes.customColor.value;
-			var displacement = attributes.displacement.value;
+			var colors = new Float32Array( numFaces * 3 * 3 );
+			var displacement = new Float32Array( numFaces * 3 * 3 );
 
 
-			var nv, v = 0;
+			var color = new THREE.Color();
 
 
-			for ( var f = 0; f < geometry.faces.length; f ++ ) {
+			for ( var f = 0; f < numFaces; f ++ ) {
 
 
-				var face = geometry.faces[ f ];
+				var index = 9 * f;
 
 
-				if ( face instanceof THREE.Face3 ) {
+				var h = 0.2 * Math.random();
+				var s = 0.5 + 0.5 * Math.random();
+				var l = 0.5 + 0.5 * Math.random();
+
+				color.setHSL( h, s, l );
 
 
-					nv = 3;
+				var d = 10 * ( 0.5 - Math.random() );
+
+				for ( var i = 0; i < 3; i ++ ) {
 
 
-				} else {
+					colors[ index + ( 3 * i )     ] = color.r;
+					colors[ index + ( 3 * i ) + 1 ] = color.g;
+					colors[ index + ( 3 * i ) + 2 ] = color.b;
 
 
-					nv = 4;
+					displacement[ index + ( 3 * i )     ] = d;
+					displacement[ index + ( 3 * i ) + 1 ] = d;
+					displacement[ index + ( 3 * i ) + 2 ] = d;
 
 
 				}
 				}
 
 
-				var h = 0.15 * Math.random();
-				var s = 0.5 + 0.5 * Math.random();
-				var l = 0.5 + 0.5 * Math.random();
+			}
 
 
-				var d = 10 * ( 0.5 - Math.random() );
+			geometry.addAttribute( 'customColor', new THREE.BufferAttribute( colors, 3 ) );
+			geometry.addAttribute( 'displacement', new THREE.BufferAttribute( displacement, 3 ) );
 
 
-				var x = 2 * ( 0.5 - Math.random() );
-				var y = 2 * ( 0.5 - Math.random() );
-				var z = 2 * ( 0.5 - Math.random() );
+			//
 
 
-				for ( var i = 0; i < nv; i ++ ) {
+			attributes = [ `displacement`, `customColor` ];
 
 
-					colors[ v ] = new THREE.Color();
-					displacement[ v ] = new THREE.Vector3();
+			uniforms = {
 
 
-					colors[ v ].setHSL( h, s, l );
-					colors[ v ].convertGammaToLinear();
+				amplitude: { type: "f", value: 0.0 }
 
 
-					displacement[ v ].set( x, y, z );
+			};
 
 
-					v += 1;
+			var shaderMaterial = new THREE.ShaderMaterial( {
 
 
-				}
+				uniforms: 		uniforms,
+				attributes:     attributes,
+				vertexShader:   document.getElementById( 'vertexshader' ).textContent,
+				fragmentShader: document.getElementById( 'fragmentshader' ).textContent
 
 
-			}
+			});
 
 
-			console.log( "faces", geometry.faces.length );
+			//
 
 
 			mesh = new THREE.Mesh( geometry, shaderMaterial );
 			mesh = new THREE.Mesh( geometry, shaderMaterial );
-			mesh.rotation.set( 0.5, 0.5, 0 );
 
 
 			scene.add( mesh );
 			scene.add( mesh );
 
 
@@ -259,6 +242,7 @@
 			requestAnimationFrame( animate );
 			requestAnimationFrame( animate );
 
 
 			render();
 			render();
+
 			stats.update();
 			stats.update();
 
 
 		}
 		}
@@ -267,9 +251,10 @@
 
 
 			var time = Date.now() * 0.001;
 			var time = Date.now() * 0.001;
 
 
-			uniforms.amplitude.value = Math.sin( time * 0.5 );
+			uniforms.amplitude.value = 1.0 + Math.sin( time * 0.5 );
 
 
 			controls.update();
 			controls.update();
+
 			renderer.render( scene, camera );
 			renderer.render( scene, camera );
 
 
 		}
 		}

+ 31 - 0
src/core/BufferGeometry.js

@@ -194,11 +194,13 @@ THREE.BufferGeometry.prototype = {
 			direct.normalsNeedUpdate = geometry.normalsNeedUpdate;
 			direct.normalsNeedUpdate = geometry.normalsNeedUpdate;
 			direct.colorsNeedUpdate = geometry.colorsNeedUpdate;
 			direct.colorsNeedUpdate = geometry.colorsNeedUpdate;
 			direct.uvsNeedUpdate = geometry.uvsNeedUpdate;
 			direct.uvsNeedUpdate = geometry.uvsNeedUpdate;
+			direct.tangentsNeedUpdate = geometry.tangentsNeedUpdate;
 
 
 			geometry.verticesNeedUpdate = false;
 			geometry.verticesNeedUpdate = false;
 			geometry.normalsNeedUpdate = false;
 			geometry.normalsNeedUpdate = false;
 			geometry.colorsNeedUpdate = false;
 			geometry.colorsNeedUpdate = false;
 			geometry.uvsNeedUpdate = false;
 			geometry.uvsNeedUpdate = false;
+			geometry.tangentsNeedUpdate = false;
 
 
 			geometry = direct;
 			geometry = direct;
 
 
@@ -249,6 +251,21 @@ THREE.BufferGeometry.prototype = {
 
 
 		}
 		}
 
 
+		if ( geometry.tangentsNeedUpdate === true ) {
+
+			var attribute = this.attributes.tangent;
+
+			if ( attribute !== undefined ) {
+
+				attribute.copyVector4sArray( geometry.tangents );
+				attribute.needsUpdate = true;
+
+			}
+
+			geometry.tangentsNeedUpdate = false;
+
+		}
+
 		return this;
 		return this;
 
 
 	},
 	},
@@ -298,6 +315,20 @@ THREE.BufferGeometry.prototype = {
 
 
 		}
 		}
 
 
+		if ( geometry.uvs2.length > 0 ) {
+
+			var uvs2 = new Float32Array( geometry.uvs2.length * 2 );
+			this.addAttribute( 'uv2', new THREE.BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );
+
+		}
+
+		if ( geometry.tangents.length > 0 ) {
+
+			var tangents = new Float32Array( geometry.tangents.length * 4 );
+			this.addAttribute( 'tangent', new THREE.BufferAttribute( tangents, 4 ).copyVector4sArray( geometry.tangents ) );
+
+		}
+
 		// morphs
 		// morphs
 
 
 		if ( geometry.morphTargets.length > 0 ) {
 		if ( geometry.morphTargets.length > 0 ) {

+ 33 - 2
src/core/DirectGeometry.js

@@ -18,6 +18,7 @@ THREE.DirectGeometry = function () {
 	this.colors = [];
 	this.colors = [];
 	this.uvs = [];
 	this.uvs = [];
 	this.uvs2 = [];
 	this.uvs2 = [];
+	this.tangents = [];
 
 
 	this.morphTargets = [];
 	this.morphTargets = [];
 	this.morphColors = [];
 	this.morphColors = [];
@@ -37,6 +38,7 @@ THREE.DirectGeometry = function () {
 	this.normalsNeedUpdate = false;
 	this.normalsNeedUpdate = false;
 	this.colorsNeedUpdate = false;
 	this.colorsNeedUpdate = false;
 	this.uvsNeedUpdate = false;
 	this.uvsNeedUpdate = false;
+	this.tangentsNeedUpdate = false;
 
 
 };
 };
 
 
@@ -61,6 +63,14 @@ THREE.DirectGeometry.prototype = {
 
 
 	},
 	},
 
 
+	computeTangents: function () {
+
+		console.warn( 'THREE.DirectGeometry: computeTangents() is not a method of this type of geometry.' );
+		return this;
+
+	},
+
+
 	fromGeometry: function ( geometry ) {
 	fromGeometry: function ( geometry ) {
 
 
 		var faces = geometry.faces;
 		var faces = geometry.faces;
@@ -70,6 +80,8 @@ THREE.DirectGeometry.prototype = {
 		var hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;
 		var hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;
 		var hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;
 		var hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;
 
 
+		var hasTangents = geometry.hasTangents;
+
 		// morphs
 		// morphs
 
 
 		var morphTargets = geometry.morphTargets;
 		var morphTargets = geometry.morphTargets;
@@ -153,7 +165,7 @@ THREE.DirectGeometry.prototype = {
 
 
 				} else {
 				} else {
 
 
-					console.warn( 'THREE.BufferGeometry.fromGeometry(): Undefined vertexUv', i );
+					console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );
 
 
 					this.uvs.push( new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2() );
 					this.uvs.push( new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2() );
 
 
@@ -171,7 +183,7 @@ THREE.DirectGeometry.prototype = {
 
 
 				} else {
 				} else {
 
 
-					console.warn( 'THREE.BufferGeometry.fromGeometry(): Undefined vertexUv2', i );
+					console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );
 
 
 					this.uvs2.push( new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2() );
 					this.uvs2.push( new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2() );
 
 
@@ -179,6 +191,24 @@ THREE.DirectGeometry.prototype = {
 
 
 			}
 			}
 
 
+			if ( hasTangents === true ) {
+
+				var vertexTangents = face.vertexTangents;
+
+				if ( vertexTangents.length === 3 ) {
+
+					this.tangents.push( vertexTangents[ 0 ], vertexTangents[ 1 ], vertexTangents[ 2 ] );
+
+				} else {
+
+					console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined tangents ', i );
+
+					this.tangents.push( new THREE.Vector4(), new THREE.Vector4(), new THREE.Vector4() );
+
+				}
+
+			}
+
 			// morphs
 			// morphs
 
 
 			for ( var j = 0; j < morphTargetsLength; j ++ ) {
 			for ( var j = 0; j < morphTargetsLength; j ++ ) {
@@ -226,6 +256,7 @@ THREE.DirectGeometry.prototype = {
 		this.normalsNeedUpdate = geometry.normalsNeedUpdate;
 		this.normalsNeedUpdate = geometry.normalsNeedUpdate;
 		this.colorsNeedUpdate = geometry.colorsNeedUpdate;
 		this.colorsNeedUpdate = geometry.colorsNeedUpdate;
 		this.uvsNeedUpdate = geometry.uvsNeedUpdate;
 		this.uvsNeedUpdate = geometry.uvsNeedUpdate;
+		this.tangentsNeedUpdate = geometry.tangentsNeedUpdate;
 
 
 		return this;
 		return this;
 
 

+ 35 - 2
src/core/Geometry.js

@@ -103,11 +103,18 @@ THREE.Geometry.prototype = {
 		var normals = attributes.normal !== undefined ? attributes.normal.array : undefined;
 		var normals = attributes.normal !== undefined ? attributes.normal.array : undefined;
 		var colors = attributes.color !== undefined ? attributes.color.array : undefined;
 		var colors = attributes.color !== undefined ? attributes.color.array : undefined;
 		var uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;
 		var uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;
+		var uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined;
+		var tangents = attributes.tangent !== undefined ? attributes.tangent.array : undefined;
+
+		if ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = [];
+		if ( tangents !== undefined ) this.hasTangents = true;
 
 
 		var tempNormals = [];
 		var tempNormals = [];
 		var tempUVs = [];
 		var tempUVs = [];
+		var tempUVs2 = [];
+		var tempTangents = [];
 
 
-		for ( var i = 0, j = 0; i < vertices.length; i += 3, j += 2 ) {
+		for ( var i = 0, j = 0, k = 0; i < vertices.length; i += 3, j += 2, k += 4 ) {
 
 
 			scope.vertices.push( new THREE.Vector3( vertices[ i ], vertices[ i + 1 ], vertices[ i + 2 ] ) );
 			scope.vertices.push( new THREE.Vector3( vertices[ i ], vertices[ i + 1 ], vertices[ i + 2 ] ) );
 
 
@@ -129,6 +136,18 @@ THREE.Geometry.prototype = {
 
 
 			}
 			}
 
 
+			if ( uvs2 !== undefined ) {
+
+				tempUVs2.push( new THREE.Vector2( uvs2[ j ], uvs2[ j + 1 ] ) );
+
+			}
+
+			if ( tangents !== undefined ) {
+
+				tempTangents.push( new THREE.Vector4( tangents[ k ], tangents[ k + 1 ], tangents[ k + 2 ], tangents[ k + 3 ] ) );
+
+			}
+
 		}
 		}
 
 
 		var addFace = function ( a, b, c ) {
 		var addFace = function ( a, b, c ) {
@@ -136,7 +155,9 @@ THREE.Geometry.prototype = {
 			var vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];
 			var vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];
 			var vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];
 			var vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];
 
 
-			scope.faces.push( new THREE.Face3( a, b, c, vertexNormals, vertexColors ) );
+			var face = new THREE.Face3( a, b, c, vertexNormals, vertexColors );
+
+			scope.faces.push( face );
 
 
 			if ( uvs !== undefined ) {
 			if ( uvs !== undefined ) {
 
 
@@ -144,6 +165,18 @@ THREE.Geometry.prototype = {
 
 
 			}
 			}
 
 
+			if ( uvs2 !== undefined ) {
+
+				scope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] );
+
+			}
+
+			if ( tangents !== undefined ) {
+
+				face.vertexTangents.push( tempTangents[ a ].clone(), tempTangents[ b ].clone(), tempTangents[ c ].clone() );
+
+			}
+
 		};
 		};
 
 
 		if ( indices !== undefined ) {
 		if ( indices !== undefined ) {

+ 29 - 0
src/lights/AreaLight.js

@@ -1,6 +1,7 @@
 /**
 /**
  * @author MPanknin / http://www.redplant.de/
  * @author MPanknin / http://www.redplant.de/
  * @author alteredq / http://alteredqualia.com/
  * @author alteredq / http://alteredqualia.com/
+ * @author prafullit
  */
  */
 
 
 THREE.AreaLight = function ( color, intensity ) {
 THREE.AreaLight = function ( color, intensity ) {
@@ -26,3 +27,31 @@ THREE.AreaLight = function ( color, intensity ) {
 THREE.AreaLight.prototype = Object.create( THREE.Light.prototype );
 THREE.AreaLight.prototype = Object.create( THREE.Light.prototype );
 THREE.AreaLight.prototype.constructor = THREE.AreaLight;
 THREE.AreaLight.prototype.constructor = THREE.AreaLight;
 
 
+THREE.AreaLight.prototype.clone = function () {
+
+	var light = new THREE.AreaLight();
+
+	THREE.Light.prototype.clone.call( this, light );
+
+	light.normal.copy(this.normal);
+	light.right.copy(this.right);
+	light.intensity = this.intensity;
+	light.width = this.width;
+	light.height = this.height;
+	light.constantAttenuation = this.constantAttenuation;
+	light.linearAttenuation = this.linearAttenuation;
+	light.quadraticAttenuation = this.quadraticAttenuation
+
+	return light;
+
+};
+
+THREE.AreaLight.prototype.toJSON = function ( meta ) {
+
+	var data = THREE.Object3D.prototype.toJSON.call( this, meta );
+
+	data.object.color = this.color.getHex();
+	data.object.intensity = this.intensity;
+
+	return data;
+};

+ 46 - 4
src/materials/MeshFaceMaterial.js

@@ -4,11 +4,53 @@
 
 
 THREE.MeshFaceMaterial = function ( materials ) {
 THREE.MeshFaceMaterial = function ( materials ) {
 
 
-	console.error( 'THREE.MeshFaceMaterial has been removed.' );
+	this.uuid = THREE.Math.generateUUID();
 
 
-	var material = Array.isArray( materials ) ? materials[ 0 ] : new THREE.MeshBasicMaterial();
-	material.materials = []; // temporal workaround
+	this.type = 'MeshFaceMaterial';
 
 
-	return material;
+	this.materials = materials instanceof Array ? materials : [];
+
+};
+
+THREE.MeshFaceMaterial.prototype = {
+
+	constructor: THREE.MeshFaceMaterial,
+
+	toJSON: function () {
+
+		var output = {
+			metadata: {
+				version: 4.2,
+				type: 'material',
+				generator: 'MaterialExporter'
+			},
+			uuid: this.uuid,
+			type: this.type,
+			materials: []
+		};
+
+		for ( var i = 0, l = this.materials.length; i < l; i ++ ) {
+
+			output.materials.push( this.materials[ i ].toJSON() );
+
+		}
+
+		return output;
+
+	},
+
+	clone: function () {
+
+		var material = new THREE.MeshFaceMaterial();
+
+		for ( var i = 0; i < this.materials.length; i ++ ) {
+
+			material.materials.push( this.materials[ i ].clone() );
+
+		}
+
+		return material;
+
+	}
 
 
 };
 };

+ 25 - 32
src/renderers/WebGLRenderer.js

@@ -1006,6 +1006,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 		if ( material.visible === false ) return;
 		if ( material.visible === false ) return;
 
 
+		setMaterial( material );
+
 		var geometry = objects.geometries.get( object );
 		var geometry = objects.geometries.get( object );
 		var program = setProgram( camera, lights, fog, material, object );
 		var program = setProgram( camera, lights, fog, material, object );
 
 
@@ -1606,8 +1608,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 			var overrideMaterial = scene.overrideMaterial;
 			var overrideMaterial = scene.overrideMaterial;
 
 
-			setMaterial( overrideMaterial );
-
 			renderObjects( opaqueObjects, camera, lights, fog, overrideMaterial );
 			renderObjects( opaqueObjects, camera, lights, fog, overrideMaterial );
 			renderObjects( transparentObjects, camera, lights, fog, overrideMaterial );
 			renderObjects( transparentObjects, camera, lights, fog, overrideMaterial );
 			renderObjectsImmediate( objects.objectsImmediate, '', camera, lights, fog, overrideMaterial );
 			renderObjectsImmediate( objects.objectsImmediate, '', camera, lights, fog, overrideMaterial );
@@ -1727,7 +1727,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 	function renderObjects( renderList, camera, lights, fog, overrideMaterial ) {
 	function renderObjects( renderList, camera, lights, fog, overrideMaterial ) {
 
 
-		var material;
+		var material = overrideMaterial;
 
 
 		for ( var i = 0, l = renderList.length; i < l; i ++ ) {
 		for ( var i = 0, l = renderList.length; i < l; i ++ ) {
 
 
@@ -1737,21 +1737,22 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 			setupMatrices( object, camera );
 			setupMatrices( object, camera );
 
 
-			if ( overrideMaterial ) {
+			if ( overrideMaterial === null ) material = object.material;
 
 
-				material = overrideMaterial;
+			if ( material instanceof THREE.MeshFaceMaterial ) {
 
 
-			} else {
+				var materials = material.materials;
 
 
-				material = object.material;
+				for ( var j = 0, jl = materials.length; j < jl; j ++ ) {
 
 
-				if ( ! material ) continue;
+					_this.renderBufferDirect( camera, lights, fog, materials[ j ], object );
 
 
-				setMaterial( material );
+				}
+
+				continue;
 
 
 			}
 			}
 
 
-			_this.setMaterialFaces( material );
 			_this.renderBufferDirect( camera, lights, fog, material, object );
 			_this.renderBufferDirect( camera, lights, fog, material, object );
 
 
 		}
 		}
@@ -1760,7 +1761,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 	function renderObjectsImmediate ( renderList, materialType, camera, lights, fog, overrideMaterial ) {
 	function renderObjectsImmediate ( renderList, materialType, camera, lights, fog, overrideMaterial ) {
 
 
-		var material;
+		var material = overrideMaterial;
 
 
 		for ( var i = 0, l = renderList.length; i < l; i ++ ) {
 		for ( var i = 0, l = renderList.length; i < l; i ++ ) {
 
 
@@ -1769,19 +1770,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 			if ( object.visible === true ) {
 			if ( object.visible === true ) {
 
 
-				if ( overrideMaterial ) {
-
-					material = overrideMaterial;
-
-				} else {
-
-					material = webglObject[ materialType ];
-
-					if ( ! material ) continue;
-
-					setMaterial( material );
-
-				}
+				if ( overrideMaterial === null ) material = webglObject[ materialType ];
 
 
 				_this.renderImmediateObject( camera, lights, fog, material, object );
 				_this.renderImmediateObject( camera, lights, fog, material, object );
 
 
@@ -1793,12 +1782,12 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 	this.renderImmediateObject = function ( camera, lights, fog, material, object ) {
 	this.renderImmediateObject = function ( camera, lights, fog, material, object ) {
 
 
+		setMaterial( material );
+
 		var program = setProgram( camera, lights, fog, material, object );
 		var program = setProgram( camera, lights, fog, material, object );
 
 
 		_currentGeometryProgram = '';
 		_currentGeometryProgram = '';
 
 
-		_this.setMaterialFaces( material );
-
 		if ( object.immediateRenderCallback ) {
 		if ( object.immediateRenderCallback ) {
 
 
 			object.immediateRenderCallback( program, _gl, _frustum );
 			object.immediateRenderCallback( program, _gl, _frustum );
@@ -2048,6 +2037,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 	function setMaterial( material ) {
 	function setMaterial( material ) {
 
 
+		setMaterialFaces( material );
+
 		if ( material.transparent === true ) {
 		if ( material.transparent === true ) {
 
 
 			state.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha );
 			state.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha );
@@ -2066,6 +2057,13 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 	}
 	}
 
 
+	function setMaterialFaces( material ) {
+
+		state.setDoubleSided( material.side === THREE.DoubleSide );
+		state.setFlipSided( material.side === THREE.BackSide );
+
+	}
+
 	function setProgram( camera, lights, fog, material, object ) {
 	function setProgram( camera, lights, fog, material, object ) {
 
 
 		_usedTextureUnits = 0;
 		_usedTextureUnits = 0;
@@ -3150,12 +3148,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 	};
 	};
 
 
-	this.setMaterialFaces = function ( material ) {
-
-		state.setDoubleSided( material.side === THREE.DoubleSide );
-		state.setFlipSided( material.side === THREE.BackSide );
-
-	};
+	this.setMaterialFaces = setMaterialFaces;
 
 
 	// Textures
 	// Textures
 
 

+ 1 - 1
src/renderers/shaders/ShaderChunk/color_vertex.glsl

@@ -1,5 +1,5 @@
 #ifdef USE_COLOR
 #ifdef USE_COLOR
 
 
-	vColor.xyz = inputToLinear( color.xyz );
+	vColor.xyz = color.xyz;
 
 
 #endif
 #endif

+ 0 - 3
src/renderers/shaders/ShaderChunk/shadowmap_fragment.glsl

@@ -209,9 +209,6 @@
 
 
 	}
 	}
 
 
-	// NOTE: I am unsure if this is correct in linear space.  -bhouston, Dec 29, 2014
-	shadowColor = inputToLinear( shadowColor );
-
 	outgoingLight = outgoingLight * shadowColor;
 	outgoingLight = outgoingLight * shadowColor;
 
 
 #endif
 #endif

Неке датотеке нису приказане због велике количине промена