Pārlūkot izejas kodu

SoftwareRenderer: Spaces to tabs.

Mr.doob 11 gadi atpakaļ
vecāks
revīzija
2d6f2069f7
1 mainītis faili ar 477 papildinājumiem un 477 dzēšanām
  1. 477 477
      examples/js/renderers/SoftwareRenderer.js

+ 477 - 477
examples/js/renderers/SoftwareRenderer.js

@@ -297,226 +297,226 @@ THREE.SoftwareRenderer = function ( parameters ) {
 		context.fillRect( 0, 0, canvasWidth, canvasHeight );
 	}
 
-    function getPalette( material, bSimulateSpecular ) {
-        var diffuseR = material.ambient.r + material.color.r * 255;
-        var diffuseG = material.ambient.g + material.color.g * 255;
-        var diffuseB = material.ambient.b + material.color.b * 255;
-        var palette = new Uint8Array(256*3);
-        
-        if ( bSimulateSpecular ) {
-            
-            var i = 0, j = 0;
-            while(i < 204) {
-                var r = i * diffuseR / 204;
-                var g = i * diffuseG / 204;
-                var b = i * diffuseB / 204;
-                if(r > 255)
-                    r = 255;
-                if(g > 255)
-                    g = 255;
-                if(b > 255)
-                    b = 255;
-
-                palette[j++] = r;
-                palette[j++] = g;
-                palette[j++] = b;
-                ++i;
-            }
-
-            while(i < 256) { // plus specular highlight
-                var r = diffuseR + (i - 204) * (255 - diffuseR) / 82;
-                var g = diffuseG + (i - 204) * (255 - diffuseG) / 82;
-                var b = diffuseB + (i - 204) * (255 - diffuseB) / 82;
-                if(r > 255)
-                    r = 255;
-                if(g > 255)
-                    g = 255;
-                if(b > 255)
-                    b = 255;
+	function getPalette( material, bSimulateSpecular ) {
+		var diffuseR = material.ambient.r + material.color.r * 255;
+		var diffuseG = material.ambient.g + material.color.g * 255;
+		var diffuseB = material.ambient.b + material.color.b * 255;
+		var palette = new Uint8Array(256*3);
+		
+		if ( bSimulateSpecular ) {
+			
+			var i = 0, j = 0;
+			while(i < 204) {
+				var r = i * diffuseR / 204;
+				var g = i * diffuseG / 204;
+				var b = i * diffuseB / 204;
+				if(r > 255)
+					r = 255;
+				if(g > 255)
+					g = 255;
+				if(b > 255)
+					b = 255;
+
+				palette[j++] = r;
+				palette[j++] = g;
+				palette[j++] = b;
+				++i;
+			}
+
+			while(i < 256) { // plus specular highlight
+				var r = diffuseR + (i - 204) * (255 - diffuseR) / 82;
+				var g = diffuseG + (i - 204) * (255 - diffuseG) / 82;
+				var b = diffuseB + (i - 204) * (255 - diffuseB) / 82;
+				if(r > 255)
+					r = 255;
+				if(g > 255)
+					g = 255;
+				if(b > 255)
+					b = 255;
 				
-                palette[j++] = r;
-                palette[j++] = g;
-                palette[j++] = b;
-                ++i;
-            }
-            
-        } else {
-          
-            var i = 0, j = 0;
-            while(i < 256) {
-                var r = i * diffuseR / 255;
-                var g = i * diffuseG / 255;
-                var b = i * diffuseB / 255;
-                if(r > 255)
-                    r = 255;
-                if(g > 255)
-                    g = 255;
-                if(b > 255)
-                    b = 255;
-
-                palette[j++] = r;
-                palette[j++] = g;
-                palette[j++] = b;
-                ++i;
-            }           
-            
-        }
-        
-        return palette;
-    }
-    
-    function basicMaterialShader( buffer, depthBuf, offset, depth, u, v, n, face, material ) {
+				palette[j++] = r;
+				palette[j++] = g;
+				palette[j++] = b;
+				++i;
+			}
+			
+		} else {
+			
+			var i = 0, j = 0;
+			while(i < 256) {
+				var r = i * diffuseR / 255;
+				var g = i * diffuseG / 255;
+				var b = i * diffuseB / 255;
+				if(r > 255)
+					r = 255;
+				if(g > 255)
+					g = 255;
+				if(b > 255)
+					b = 255;
+
+				palette[j++] = r;
+				palette[j++] = g;
+				palette[j++] = b;
+				++i;
+			}
+			
+		}
+		
+		return palette;
+	}
+	
+	function basicMaterialShader( buffer, depthBuf, offset, depth, u, v, n, face, material ) {
 	
 		var colorOffset = offset * 4;
 
-    	if ( material.needsUpdate && !material.texture.data ) {
-    		material.texture.CreateFromImage( material.map.image );
-    	}
+		if ( material.needsUpdate && !material.texture.data ) {
+			material.texture.CreateFromImage( material.map.image );
+		}
 
-    	if ( !material.texture.data )
-    		return;
+		if ( !material.texture.data )
+			return;
 
-        var tdim = material.texture.width;
-        var isTransparent = material.transparent;
-        var tbound = tdim - 1;
-        var tdata = material.texture.data;
-        var tIndex = (((v * tdim) & tbound) * tdim + ((u * tdim) & tbound)) * 4;
-        
-        if ( !isTransparent ) {
-            buffer[ colorOffset ] = tdata[tIndex];
-            buffer[ colorOffset + 1 ] = tdata[tIndex+1];
-            buffer[ colorOffset + 2 ] = tdata[tIndex+2];
-            buffer[ colorOffset + 3 ] = material.opacity * 255;
+		var tdim = material.texture.width;
+		var isTransparent = material.transparent;
+		var tbound = tdim - 1;
+		var tdata = material.texture.data;
+		var tIndex = (((v * tdim) & tbound) * tdim + ((u * tdim) & tbound)) * 4;
+		
+		if ( !isTransparent ) {
+			buffer[ colorOffset ] = tdata[tIndex];
+			buffer[ colorOffset + 1 ] = tdata[tIndex+1];
+			buffer[ colorOffset + 2 ] = tdata[tIndex+2];
+			buffer[ colorOffset + 3 ] = material.opacity * 255;
 			depthBuf[ offset ] = depth;
 		}
-        else { 
-            var opaci = tdata[tIndex+3] * material.opacity;
-            var texel = (tdata[tIndex] << 16) + (tdata[tIndex+1] << 8) + tdata[tIndex+2];
-            if(opaci < 250) {
-                var backColor = (buffer[colorOffset] << 16) + (buffer[colorOffset + 1] << 8) + buffer[colorOffset + 2];
-                texel = texel * opaci + backColor * (1-opaci);                         
-            } 
-            
-            buffer[ colorOffset ] = (texel & 0xff0000) >> 16;
-            buffer[ colorOffset + 1 ] = (texel & 0xff00) >> 8;
-            buffer[ colorOffset + 2 ] = texel & 0xff;
-            buffer[ colorOffset + 3 ] = material.opacity * 255;
-        }
-    }
-    
-    function lightingMaterialShader( buffer, depthBuf, offset, depth, u, v, n, face, material ) {
-        
-        var colorOffset = offset * 4;
+		else { 
+			var opaci = tdata[tIndex+3] * material.opacity;
+			var texel = (tdata[tIndex] << 16) + (tdata[tIndex+1] << 8) + tdata[tIndex+2];
+			if(opaci < 250) {
+				var backColor = (buffer[colorOffset] << 16) + (buffer[colorOffset + 1] << 8) + buffer[colorOffset + 2];
+				texel = texel * opaci + backColor * (1-opaci);						 
+			} 
+			
+			buffer[ colorOffset ] = (texel & 0xff0000) >> 16;
+			buffer[ colorOffset + 1 ] = (texel & 0xff00) >> 8;
+			buffer[ colorOffset + 2 ] = texel & 0xff;
+			buffer[ colorOffset + 3 ] = material.opacity * 255;
+		}
+	}
+	
+	function lightingMaterialShader( buffer, depthBuf, offset, depth, u, v, n, face, material ) {
 		
-    	if ( material.map.needsUpdate && !material.texture.data ) {
-    		material.texture.CreateFromImage( material.map.image );
-    	}
-
-    	if ( !material.texture.data )
-    		return;
-
-        var tdim = material.texture.width;
-        var isTransparent = material.transparent;
-        var cIndex = (n > 0 ? (~~n) : 0) * 3;
-        var tbound = tdim - 1;
-        var tdata = material.texture.data;
-        var tIndex = (((v * tdim) & tbound) * tdim + ((u * tdim) & tbound)) * 4;
-        
-        if ( !isTransparent ) {
-          buffer[ colorOffset ] = (material.palette[cIndex] * tdata[tIndex]) >> 8;
-          buffer[ colorOffset + 1 ] = (material.palette[cIndex+1] * tdata[tIndex+1]) >> 8;
-          buffer[ colorOffset + 2 ] = (material.palette[cIndex+2] * tdata[tIndex+2]) >> 8;
-          buffer[ colorOffset + 3 ] = material.opacity * 255;		  
-		  depthBuf[ offset ] = depth;
-        } else { 
-          var opaci = tdata[tIndex+3] * material.opacity;
-          var foreColor = ((material.palette[cIndex] * tdata[tIndex]) << 16) 
-          				+ ((material.palette[cIndex+1] * tdata[tIndex+1]) << 8 )
-          				+ (material.palette[cIndex+2] * tdata[tIndex+2]);
-          
-          if(opaci < 250) {
-            var backColor = buffer[ colorOffset ] << 24 + buffer[ colorOffset + 1 ] << 16 + buffer[ colorOffset + 2 ] << 8;
-            foreColor = foreColor * opaci + backColor * (1-opaci);                          
-          } 
-		  
-          buffer[ colorOffset ] = (foreColor & 0xff0000) >> 16;
-          buffer[ colorOffset + 1 ] = (foreColor & 0xff00) >> 8;
-          buffer[ colorOffset + 2 ] = (foreColor & 0xff);
-          buffer[ colorOffset + 3 ] = material.opacity * 255;
-        }
-        
-    }
-    
+		var colorOffset = offset * 4;
+		
+		if ( material.map.needsUpdate && !material.texture.data ) {
+			material.texture.CreateFromImage( material.map.image );
+		}
+
+		if ( !material.texture.data )
+			return;
+
+		var tdim = material.texture.width;
+		var isTransparent = material.transparent;
+		var cIndex = (n > 0 ? (~~n) : 0) * 3;
+		var tbound = tdim - 1;
+		var tdata = material.texture.data;
+		var tIndex = (((v * tdim) & tbound) * tdim + ((u * tdim) & tbound)) * 4;
+		
+		if ( !isTransparent ) {
+			buffer[ colorOffset ] = (material.palette[cIndex] * tdata[tIndex]) >> 8;
+			buffer[ colorOffset + 1 ] = (material.palette[cIndex+1] * tdata[tIndex+1]) >> 8;
+			buffer[ colorOffset + 2 ] = (material.palette[cIndex+2] * tdata[tIndex+2]) >> 8;
+			buffer[ colorOffset + 3 ] = material.opacity * 255;			
+			depthBuf[ offset ] = depth;
+		} else { 
+			var opaci = tdata[tIndex+3] * material.opacity;
+			var foreColor = ((material.palette[cIndex] * tdata[tIndex]) << 16) 
+							+ ((material.palette[cIndex+1] * tdata[tIndex+1]) << 8 )
+							+ (material.palette[cIndex+2] * tdata[tIndex+2]);
+			
+			if(opaci < 250) {
+			var backColor = buffer[ colorOffset ] << 24 + buffer[ colorOffset + 1 ] << 16 + buffer[ colorOffset + 2 ] << 8;
+			foreColor = foreColor * opaci + backColor * (1-opaci);							
+			} 
+			
+			buffer[ colorOffset ] = (foreColor & 0xff0000) >> 16;
+			buffer[ colorOffset + 1 ] = (foreColor & 0xff00) >> 8;
+			buffer[ colorOffset + 2 ] = (foreColor & 0xff);
+			buffer[ colorOffset + 3 ] = material.opacity * 255;
+		}
+		
+	}
+	
 	function getMaterialShader( material ) {
 
 		var id = material.id;
 		var shader = shaders[ id ];
 
 		if ( shaders[ id ] === undefined ) {
-            
+			
 			if ( material instanceof THREE.MeshBasicMaterial ||
-			     material instanceof THREE.MeshLambertMaterial ||
-			     material instanceof THREE.MeshPhongMaterial ||
-			     material instanceof THREE.SpriteMaterial ) {
-
-                if ( material instanceof THREE.MeshLambertMaterial ) {             
-                    // Generate color palette
-                    if ( !material.palette ) {
-                        material.palette = getPalette( material, false );
-                    }
-                    
-                } else if ( material instanceof THREE.MeshPhongMaterial ) {             
-                    // Generate color palette
-                    if ( !material.palette ) {
-                        material.palette = getPalette( material, true );
-                    }
-                }
+				 material instanceof THREE.MeshLambertMaterial ||
+				 material instanceof THREE.MeshPhongMaterial ||
+				 material instanceof THREE.SpriteMaterial ) {
+
+				if ( material instanceof THREE.MeshLambertMaterial ) {			 
+					// Generate color palette
+					if ( !material.palette ) {
+						material.palette = getPalette( material, false );
+					}
+					
+				} else if ( material instanceof THREE.MeshPhongMaterial ) {			 
+					// Generate color palette
+					if ( !material.palette ) {
+						material.palette = getPalette( material, true );
+					}
+				}
 
 				var string;
-                
-                if ( material.map ) {
-                    
+				
+				if ( material.map ) {
+					
 					var texture = new THREE.SoftwareRenderer.Texture();
 					material.texture = texture;					
-                     
-                    if ( material instanceof THREE.MeshBasicMaterial 
+					 
+					if ( material instanceof THREE.MeshBasicMaterial 
 						|| material instanceof THREE.SpriteMaterial ) { 
 						
-                        shader = basicMaterialShader;
-                    } else {
-                        
-                        shader = lightingMaterialShader;
-                    }
-                    
-                    
-                } else {
-                    
-                    if ( material.vertexColors === THREE.FaceColors ) {
-
-                        string = [
-						    'var colorOffset = offset * 4;',
-                            'buffer[ colorOffset ] = face.color.r * 255;',
-                            'buffer[ colorOffset + 1 ] = face.color.g * 255;',
-                            'buffer[ colorOffset + 2 ] = face.color.b * 255;',
-                            'buffer[ colorOffset + 3 ] = material.opacity * 255;',
+						shader = basicMaterialShader;
+					} else {
+						
+						shader = lightingMaterialShader;
+					}
+					
+					
+				} else {
+					
+					if ( material.vertexColors === THREE.FaceColors ) {
+
+						string = [
+							'var colorOffset = offset * 4;',
+							'buffer[ colorOffset ] = face.color.r * 255;',
+							'buffer[ colorOffset + 1 ] = face.color.g * 255;',
+							'buffer[ colorOffset + 2 ] = face.color.b * 255;',
+							'buffer[ colorOffset + 3 ] = material.opacity * 255;',
 							'depthBuf[ offset ] = depth;'
-                        ].join('\n');
+						].join('\n');
 
-                    } else {
+					} else {
 
-                        string = [
+						string = [
 							'var colorOffset = offset * 4;',
-                            'buffer[ colorOffset ] = material.color.r * 255;',
-                            'buffer[ colorOffset + 1 ] = material.color.g * 255;',
-                            'buffer[ colorOffset + 2 ] = material.color.b * 255;',
-                            'buffer[ colorOffset + 3 ] = material.opacity * 255;',
+							'buffer[ colorOffset ] = material.color.r * 255;',
+							'buffer[ colorOffset + 1 ] = material.color.g * 255;',
+							'buffer[ colorOffset + 2 ] = material.color.b * 255;',
+							'buffer[ colorOffset + 3 ] = material.opacity * 255;',
 							'depthBuf[ offset ] = depth;'
-                        ].join('\n');
+						].join('\n');
 
-                    }
-                    
-                    shader = new Function( 'buffer, depthBuf, offset, depth, u, v, n, face, material', string );
-                }			
+					}
+					
+					shader = new Function( 'buffer, depthBuf, offset, depth, u, v, n, face, material', string );
+				}			
 
 			} else {
 
@@ -589,38 +589,38 @@ THREE.SoftwareRenderer = function ( parameters ) {
 		var z1 = (v1.z * viewportZScale + viewportZOffs) | 0;
 		var z2 = (v2.z * viewportZScale + viewportZOffs) | 0;
 		var z3 = (v3.z * viewportZScale + viewportZOffs) | 0;
-        
-        // UV values
-        var bHasUV = false;
-        var tu1, tv1, tu2, tv2, tu3, tv3;
-        
-        if ( uv1 && uv2 && uv3 ) {
-            bHasUV = true;
-            
-            tu1 = uv1.x; 
-            tv1 = 1-uv1.y; 
-            tu2 = uv2.x; 
-            tv2 = 1-uv2.y; 
-            tu3 = uv3.x; 
-            tv3 = 1-uv3.y; 
-        }             
-        
-        // Normal values
-        var bHasNormal = false;
-        var n1, n2, n3, nz1, nz2, nz3;
-        
-        if ( face.vertexNormalsModel ) {            
-            bHasNormal = true;
-            
-            n1 = face.vertexNormalsModel[0];
-            n2 = face.vertexNormalsModel[1];
-            n3 = face.vertexNormalsModel[2]; 
-            nz1 = n1.z * 255;
-            nz2 = n2.z * 255;
-            nz3 = n3.z * 255;
-        }
-        
-        // Deltas
+		
+		// UV values
+		var bHasUV = false;
+		var tu1, tv1, tu2, tv2, tu3, tv3;
+		
+		if ( uv1 && uv2 && uv3 ) {
+			bHasUV = true;
+			
+			tu1 = uv1.x; 
+			tv1 = 1-uv1.y; 
+			tu2 = uv2.x; 
+			tv2 = 1-uv2.y; 
+			tu3 = uv3.x; 
+			tv3 = 1-uv3.y; 
+		}			 
+		
+		// Normal values
+		var bHasNormal = false;
+		var n1, n2, n3, nz1, nz2, nz3;
+		
+		if ( face.vertexNormalsModel ) {			
+			bHasNormal = true;
+			
+			n1 = face.vertexNormalsModel[0];
+			n2 = face.vertexNormalsModel[1];
+			n3 = face.vertexNormalsModel[2]; 
+			nz1 = n1.z * 255;
+			nz2 = n2.z * 255;
+			nz3 = n3.z * 255;
+		}
+		
+		// Deltas
 
 		var dx12 = x1 - x2, dy12 = y2 - y1;
 		var dx23 = x2 - x3, dy23 = y3 - y2;
@@ -650,7 +650,7 @@ THREE.SoftwareRenderer = function ( parameters ) {
 		// Constant part of half-edge functions
 
 		var minXfixscale = (minx << subpixelBits);
-        var minYfixscale = (miny << subpixelBits);
+		var minYfixscale = (miny << subpixelBits);
 
 		var c1 = dy12 * ((minXfixscale) - x1) + dx12 * ((minYfixscale) - y1);
 		var c2 = dy23 * ((minXfixscale) - x2) + dx23 * ((minYfixscale) - y2);
@@ -684,43 +684,43 @@ THREE.SoftwareRenderer = function ( parameters ) {
 		var fixscale = (1 << subpixelBits);
 		dzdx = (dzdx * fixscale) | 0;
 		dzdy = (dzdy * fixscale) | 0;
-        
-        var dtvdx, dtvdy, cbtu, cbtv;
-        if ( bHasUV ) {
-            // UV interpolation setup
-            var dtu12 = tu1 - tu2, dtu31 = tu3 - tu1;
-            var dtudx = (invDet * (dtu12*dy31 - dtu31*dy12)); // dtu per one subpixel step in x
-            var dtudy = (invDet * (dtu12*dx31 - dx12*dtu31)); // dtu per one subpixel step in y
-            var dtv12 = tv1 - tv2, dtv31 = tv3 - tv1;
-            dtvdx = (invDet * (dtv12*dy31 - dtv31*dy12)); // dtv per one subpixel step in x
-            dtvdy = (invDet * (dtv12*dx31 - dx12*dtv31)); // dtv per one subpixel step in y   
-            
-            // UV at top/left corner of rast area
-            cbtu = ( tu1 + (minXfixscale - x1) * dtudx + (minYfixscale - y1) * dtudy );
-            cbtv = ( tv1 + (minXfixscale - x1) * dtvdx + (minYfixscale - y1) * dtvdy );
-            
-            // UV pixel steps            
-            dtudx = dtudx * fixscale;
-            dtudy = dtudy * fixscale;        
-            dtvdx = dtvdx * fixscale;
-            dtvdy = dtvdy * fixscale;
-        }              
-
-        var dnxdx, dnzdy, cbnz;
-        if ( bHasNormal ) {
-             // Normal interpolation setup        
-            var dnz12 = nz1 - nz2, dnz31 = nz3 - nz1;
-            var dnzdx = (invDet * (dnz12*dy31 - dnz31*dy12)); // dnz per one subpixel step in x
-            var dnzdy = (invDet * (dnz12*dx31 - dx12*dnz31)); // dnz per one subpixel step in y
-            
-            // Normal at top/left corner of rast area       
-            cbnz = ( nz1 + (minXfixscale - x1) * dnzdx + (minYfixscale - y1) * dnzdy );
-
-            // Normal pixel steps
-            dnzdx = (dnzdx * fixscale);
-            dnzdy = (dnzdy * fixscale);
-        }
-        
+		
+		var dtvdx, dtvdy, cbtu, cbtv;
+		if ( bHasUV ) {
+			// UV interpolation setup
+			var dtu12 = tu1 - tu2, dtu31 = tu3 - tu1;
+			var dtudx = (invDet * (dtu12*dy31 - dtu31*dy12)); // dtu per one subpixel step in x
+			var dtudy = (invDet * (dtu12*dx31 - dx12*dtu31)); // dtu per one subpixel step in y
+			var dtv12 = tv1 - tv2, dtv31 = tv3 - tv1;
+			dtvdx = (invDet * (dtv12*dy31 - dtv31*dy12)); // dtv per one subpixel step in x
+			dtvdy = (invDet * (dtv12*dx31 - dx12*dtv31)); // dtv per one subpixel step in y	 
+			
+			// UV at top/left corner of rast area
+			cbtu = ( tu1 + (minXfixscale - x1) * dtudx + (minYfixscale - y1) * dtudy );
+			cbtv = ( tv1 + (minXfixscale - x1) * dtvdx + (minYfixscale - y1) * dtvdy );
+			
+			// UV pixel steps			
+			dtudx = dtudx * fixscale;
+			dtudy = dtudy * fixscale;		
+			dtvdx = dtvdx * fixscale;
+			dtvdy = dtvdy * fixscale;
+		}				
+
+		var dnxdx, dnzdy, cbnz;
+		if ( bHasNormal ) {
+			 // Normal interpolation setup		
+			var dnz12 = nz1 - nz2, dnz31 = nz3 - nz1;
+			var dnzdx = (invDet * (dnz12*dy31 - dnz31*dy12)); // dnz per one subpixel step in x
+			var dnzdy = (invDet * (dnz12*dx31 - dx12*dnz31)); // dnz per one subpixel step in y
+			
+			// Normal at top/left corner of rast area		 
+			cbnz = ( nz1 + (minXfixscale - x1) * dnzdx + (minYfixscale - y1) * dnzdy );
+
+			// Normal pixel steps
+			dnzdx = (dnzdx * fixscale);
+			dnzdy = (dnzdy * fixscale);
+		}
+		
 		// Set up min/max corners
 		var qm1 = q - 1; // for convenience
 		var nmin1 = 0, nmax1 = 0;
@@ -749,18 +749,18 @@ THREE.SoftwareRenderer = function ( parameters ) {
 		var e2x = qstep * dy23;
 		var e3x = qstep * dy31;
 		var ezx = qstep * dzdx;
-        
-        var etux, etvx; 
-        if ( bHasUV ) {
-            etux = qstep * dtudx;
-            etvx = qstep * dtvdx;
-        }
-
-        var enzx; 
-        if ( bHasNormal ) {
-            enzx = qstep * dnzdx;
-        }
-                
+		
+		var etux, etvx; 
+		if ( bHasUV ) {
+			etux = qstep * dtudx;
+			etvx = qstep * dtvdx;
+		}
+
+		var enzx; 
+		if ( bHasNormal ) {
+			enzx = qstep * dnzdx;
+		}
+				
 		var x0 = minx;
 
 		for ( var y0 = miny; y0 < maxy; y0 += q ) {
@@ -773,16 +773,16 @@ THREE.SoftwareRenderer = function ( parameters ) {
 				cb2 += e2x;
 				cb3 += e3x;
 				cbz += ezx;
-                
-                if ( bHasUV ) {
-                    cbtu += etux;
-                    cbtv += etvx;
-                }
-                
-                if ( bHasNormal ) {
-                    cbnz += enzx;
-                }                
-                
+				
+				if ( bHasUV ) {
+					cbtu += etux;
+					cbtv += etvx;
+				}
+				
+				if ( bHasNormal ) {
+					cbnz += enzx;
+				}				
+				
 			}
 
 			// Okay, we're now in a block we know is outside. Reverse direction and go into main loop.
@@ -791,15 +791,15 @@ THREE.SoftwareRenderer = function ( parameters ) {
 			e2x = -e2x;
 			e3x = -e3x;
 			ezx = -ezx;
-            
-            if ( bHasUV ) {                
-                etux = -etux;
-                etvx = -etvx;
-            }
-           
-            if ( bHasNormal ) {
-                enzx = -enzx;
-            }            
+			
+			if ( bHasUV ) {				
+				etux = -etux;
+				etvx = -etvx;
+			}
+			 
+			if ( bHasNormal ) {
+				enzx = -enzx;
+			}			
 
 			while ( 1 ) {
 
@@ -809,15 +809,15 @@ THREE.SoftwareRenderer = function ( parameters ) {
 				cb2 += e2x;
 				cb3 += e3x;
 				cbz += ezx;
-                
-                if ( bHasUV ) {
-                    cbtu += etux;
-                    cbtv += etvx;
-                }
-               
-                if ( bHasNormal ) {
-                    cbnz += enzx;
-                }              
+				
+				if ( bHasUV ) {
+					cbtu += etux;
+					cbtv += etvx;
+				}
+				 
+				if ( bHasNormal ) {
+					cbnz += enzx;
+				}				
 
 				// We're done with this block line when at least one edge completely out
 				// If an edge function is too small and decreasing in the current traversal
@@ -843,7 +843,7 @@ THREE.SoftwareRenderer = function ( parameters ) {
 
 				// Offset at top-left corner
 				var offset = x0 + y0 * canvasWidth;
-                
+				
 				// Accept whole block when fully covered
 				if ( cb1 >= nmin1 && cb2 >= nmin2 && cb3 >= nmin3 ) {
 
@@ -853,58 +853,58 @@ THREE.SoftwareRenderer = function ( parameters ) {
 					var cy1 = cb1;
 					var cy2 = cb2;
 					var cyz = cbz;
-                    
-                    var cytu, cytv;                    
-                    if ( bHasUV ) {
-                        cytu = cbtu;
-                        cytv = cbtv;
-                    }
-                    
-                    var cynz;
-                    if ( bHasNormal ) {
-                        cynz = cbnz;
-                    }
-                    
+					
+					var cytu, cytv;					
+					if ( bHasUV ) {
+						cytu = cbtu;
+						cytv = cbtv;
+					}
+					
+					var cynz;
+					if ( bHasNormal ) {
+						cynz = cbnz;
+					}
+					
 
 					for ( var iy = 0; iy < q; iy ++ ) {
 
 						var cx1 = cy1;
 						var cx2 = cy2;
 						var cxz = cyz;
-                        
-                        var cxtu;
-                        var cxtv;                        
-                        if ( bHasUV ) {
-                            cxtu = cytu;
-                            cxtv = cytv;
-                        }
-                        
-                        var cxnz; 
-                        if ( bHasNormal ) {
-                            cxnz = cynz; 
-                        }                                               
+						
+						var cxtu;
+						var cxtv;						
+						if ( bHasUV ) {
+							cxtu = cytu;
+							cxtv = cytv;
+						}
+						
+						var cxnz; 
+						if ( bHasNormal ) {
+							cxnz = cynz; 
+						}												 
 
 						for ( var ix = 0; ix < q; ix ++ ) {
 
 							var z = cxz;
-                           
-							if ( z < zbuffer[ offset ] ) {         
-								shader( data, zbuffer, offset, z, cxtu, cxtv, cxnz, face, material );                                
+							 
+							if ( z < zbuffer[ offset ] ) {		 
+								shader( data, zbuffer, offset, z, cxtu, cxtv, cxnz, face, material );								
 							}
 
 							cx1 += dy12;
 							cx2 += dy23;
 							cxz += dzdx;
-                            
-                            if ( bHasUV ) {
-                                cxtu += dtudx;
-                                cxtv += dtvdx;
-                            }
-                            
-                            if ( bHasNormal ) {
-                                cxnz += dnzdx;
-                            }                            
-                            
+							
+							if ( bHasUV ) {
+								cxtu += dtudx;
+								cxtv += dtvdx;
+							}
+							
+							if ( bHasNormal ) {
+								cxnz += dnzdx;
+							}							
+							
 							offset++;
 
 						}
@@ -912,16 +912,16 @@ THREE.SoftwareRenderer = function ( parameters ) {
 						cy1 += dx12;
 						cy2 += dx23;
 						cyz += dzdy;
-                        
-                        if ( bHasUV ) {
-                            cytu += dtudy;
-                            cytv += dtvdy;
-                        }
-                        
-                        if ( bHasNormal ) {
-                            cynz += dnzdy;
-                        }                        
-                        
+						
+						if ( bHasUV ) {
+							cytu += dtudy;
+							cytv += dtvdy;
+						}
+						
+						if ( bHasNormal ) {
+							cynz += dnzdy;
+						}						
+						
 						offset += linestep;
 
 					}
@@ -932,17 +932,17 @@ THREE.SoftwareRenderer = function ( parameters ) {
 					var cy2 = cb2;
 					var cy3 = cb3;
 					var cyz = cbz;
-                    
-                    var cytu, cytv;
-                    if ( bHasUV ) {
-                        cytu = cbtu;
-                        cytv = cbtv;
-                    }
-                    
-                    var cynz;
-                    if ( bHasNormal ) {
-                        cynz = cbnz;
-                    }                    
+					
+					var cytu, cytv;
+					if ( bHasUV ) {
+						cytu = cbtu;
+						cytv = cbtv;
+					}
+					
+					var cynz;
+					if ( bHasNormal ) {
+						cynz = cbnz;
+					}					
 
 					for ( var iy = 0; iy < q; iy ++ ) {
 
@@ -950,26 +950,26 @@ THREE.SoftwareRenderer = function ( parameters ) {
 						var cx2 = cy2;
 						var cx3 = cy3;
 						var cxz = cyz;
-                        
-                        var cxtu;
-                        var cxtv;                            
-                        if ( bHasUV ) {
-                            cxtu = cytu;
-                            cxtv = cytv;
-                        }
-                        
-                        var cxnz;                        
-                        if ( bHasNormal ) {
-                            cxnz = cynz;     
-                        }                         
+						
+						var cxtu;
+						var cxtv;							
+						if ( bHasUV ) {
+							cxtu = cytu;
+							cxtv = cytv;
+						}
+						
+						var cxnz;						
+						if ( bHasNormal ) {
+							cxnz = cynz;	 
+						}						 
 
 						for ( var ix = 0; ix < q; ix ++ ) {
 
 							if ( ( cx1 | cx2 | cx3 ) >= 0 ) {
 
-								var z = cxz;                              
+								var z = cxz;								
 
-								if ( z < zbuffer[ offset ] ) {                       
+								if ( z < zbuffer[ offset ] ) {						 
 									shader( data, zbuffer, offset, z, cxtu, cxtv, cxnz, face, material );
 								}
 
@@ -979,16 +979,16 @@ THREE.SoftwareRenderer = function ( parameters ) {
 							cx2 += dy23;
 							cx3 += dy31;
 							cxz += dzdx;
-                            
-                            if ( bHasUV ) {
-                                cxtu += dtudx;
-                                cxtv += dtvdx;
-                            }
-                            
-                            if ( bHasNormal ) {
-                                cxnz += dnzdx;
-                            }
-                            
+							
+							if ( bHasUV ) {
+								cxtu += dtudx;
+								cxtv += dtvdx;
+							}
+							
+							if ( bHasNormal ) {
+								cxnz += dnzdx;
+							}
+							
 							offset++;
 
 						}
@@ -997,16 +997,16 @@ THREE.SoftwareRenderer = function ( parameters ) {
 						cy2 += dx23;
 						cy3 += dx31;
 						cyz += dzdy;
-                        
-                        if ( bHasUV ) {
-                            cytu += dtudy;
-                            cytv += dtvdy;
-                        }
-                        
-                        if ( bHasNormal ) {
-                            cynz += dnzdy;
-                        }                        
-                        
+						
+						if ( bHasUV ) {
+							cytu += dtudy;
+							cytv += dtvdy;
+						}
+						
+						if ( bHasNormal ) {
+							cynz += dnzdy;
+						}						
+						
 						offset += linestep;
 
 					}
@@ -1020,16 +1020,16 @@ THREE.SoftwareRenderer = function ( parameters ) {
 			cb2 += q*dx23;
 			cb3 += q*dx31;
 			cbz += q*dzdy;
-            
-            if ( bHasUV ) {
-                cbtu += q*dtudy;
-                cbtv += q*dtvdy;
-            }
-            
-            if ( bHasNormal ) {
-                cbnz += q*dnzdy;
-            }            
-            
+			
+			if ( bHasUV ) {
+				cbtu += q*dtudy;
+				cbtv += q*dtvdy;
+			}
+			
+			if ( bHasNormal ) {
+				cbnz += q*dnzdy;
+			}			
+			
 		}
 
 	}
@@ -1087,76 +1087,76 @@ THREE.SoftwareRenderer = function ( parameters ) {
 };
 
 THREE.SoftwareRenderer.Texture = function() {
-    var canvas = null;
-    
-    this.CreateFromImage = function( image ) {
-        
-        if( !image || image.width <=0 || image.height <=0 )
-            return;
-    
-        var isCanvasClean = false;
-        var canvas = THREE.SoftwareRenderer.Texture.canvas;
-        if ( !canvas ) {
-
-            try {
-
-                canvas = document.createElement('canvas');
-                THREE.SoftwareRenderer.Texture.canvas = canvas;
-                isCanvasClean = true;
-            } catch( e ) {
-                return;
-            }
-
-        }
-
-        var dim = image.width > image.height ? image.width : image.height;
-        if(dim <= 32)
-            dim = 32;
-        else if(dim <= 64)
-            dim = 64;
-        else if(dim <= 128)
-            dim = 128;
-        else if(dim <= 256)
-            dim = 256;
-        else if(dim <= 512)
-            dim = 512;
-        else
-            dim = 1024;
-
-        if(canvas.width != dim || canvas.height != dim) {
-            canvas.width = canvas.height = dim;
-            isCanvasClean = true;
-        }
-
-        var data;
-        try {
-            var ctx = canvas.getContext('2d');
-            if(!isCanvasClean)
-                ctx.clearRect(0, 0, dim, dim);
-            ctx.drawImage(image, 0, 0, dim, dim);
-            var imgData = ctx.getImageData(0, 0, dim, dim);
-            data = imgData.data;
-        }
-        catch(e) {
-            return;
-        }
-
-        var size = data.length;
-        this.data = new Uint8Array(size);
-        var alpha;
-        for(var i=0, j=0; i<size; ) {
-            this.data[i++] = data[j++];
-            this.data[i++] = data[j++];
-            this.data[i++] = data[j++];
-            alpha = data[j++];
-            this.data[i++] = alpha;
-
-            if(alpha < 255)
-                this.hasTransparency = true;
-        }
-
-        this.width = dim;
-        this.height = dim;
-        this.srcUrl = image.src;
-    };
+	var canvas = null;
+	
+	this.CreateFromImage = function( image ) {
+		
+		if( !image || image.width <=0 || image.height <=0 )
+			return;
+	
+		var isCanvasClean = false;
+		var canvas = THREE.SoftwareRenderer.Texture.canvas;
+		if ( !canvas ) {
+
+			try {
+
+				canvas = document.createElement('canvas');
+				THREE.SoftwareRenderer.Texture.canvas = canvas;
+				isCanvasClean = true;
+			} catch( e ) {
+				return;
+			}
+
+		}
+
+		var dim = image.width > image.height ? image.width : image.height;
+		if(dim <= 32)
+			dim = 32;
+		else if(dim <= 64)
+			dim = 64;
+		else if(dim <= 128)
+			dim = 128;
+		else if(dim <= 256)
+			dim = 256;
+		else if(dim <= 512)
+			dim = 512;
+		else
+			dim = 1024;
+
+		if(canvas.width != dim || canvas.height != dim) {
+			canvas.width = canvas.height = dim;
+			isCanvasClean = true;
+		}
+
+		var data;
+		try {
+			var ctx = canvas.getContext('2d');
+			if(!isCanvasClean)
+				ctx.clearRect(0, 0, dim, dim);
+			ctx.drawImage(image, 0, 0, dim, dim);
+			var imgData = ctx.getImageData(0, 0, dim, dim);
+			data = imgData.data;
+		}
+		catch(e) {
+			return;
+		}
+
+		var size = data.length;
+		this.data = new Uint8Array(size);
+		var alpha;
+		for(var i=0, j=0; i<size; ) {
+			this.data[i++] = data[j++];
+			this.data[i++] = data[j++];
+			this.data[i++] = data[j++];
+			alpha = data[j++];
+			this.data[i++] = alpha;
+
+			if(alpha < 255)
+				this.hasTransparency = true;
+		}
+
+		this.width = dim;
+		this.height = dim;
+		this.srcUrl = image.src;
+	};
 };