2
0
Эх сурвалжийг харах

Made CanvasRenderer and SVGRenderer behave like WebGLRenderer with MeshLambertMaterial and no lights.

Mr.doob 12 жил өмнө
parent
commit
286a65b78c

+ 14 - 45
examples/js/renderers/SVGRenderer.js

@@ -17,7 +17,6 @@ THREE.SVGRenderer = function () {
 	_clipBox = new THREE.Box2(),
 	_clipBox = new THREE.Box2(),
 	_elemBox = new THREE.Box2(),
 	_elemBox = new THREE.Box2(),
 
 
-	_enableLighting = false,
 	_color = new THREE.Color(),
 	_color = new THREE.Color(),
 	_diffuseColor = new THREE.Color(),
 	_diffuseColor = new THREE.Color(),
 	_emissiveColor = new THREE.Color(),
 	_emissiveColor = new THREE.Color(),
@@ -111,13 +110,7 @@ THREE.SVGRenderer = function () {
 
 
 		_pathCount = 0; _circleCount = 0; _lineCount = 0;
 		_pathCount = 0; _circleCount = 0; _lineCount = 0;
 
 
-		_enableLighting = _lights.length > 0;
-
-		if ( _enableLighting ) {
-
-			 calculateLights( _lights );
-
-		}
+		calculateLights( _lights );
 
 
 		for ( e = 0, el = _elements.length; e < el; e ++ ) {
 		for ( e = 0, el = _elements.length; e < el; e ++ ) {
 
 
@@ -283,23 +276,15 @@ THREE.SVGRenderer = function () {
 
 
 		if ( material instanceof THREE.ParticleCircleMaterial ) {
 		if ( material instanceof THREE.ParticleCircleMaterial ) {
 
 
-			if ( _enableLighting ) {
-
-				_color.r = _ambientLight.r + _directionalLights.r + _pointLights.r;
-				_color.g = _ambientLight.g + _directionalLights.g + _pointLights.g;
-				_color.b = _ambientLight.b + _directionalLights.b + _pointLights.b;
+			_color.r = _ambientLight.r + _directionalLights.r + _pointLights.r;
+			_color.g = _ambientLight.g + _directionalLights.g + _pointLights.g;
+			_color.b = _ambientLight.b + _directionalLights.b + _pointLights.b;
 
 
-				_color.r = material.color.r * _color.r;
-				_color.g = material.color.g * _color.g;
-				_color.b = material.color.b * _color.b;
+			_color.r = material.color.r * _color.r;
+			_color.g = material.color.g * _color.g;
+			_color.b = material.color.b * _color.b;
 
 
-				_color.updateStyleString();
-
-			} else {
-
-				_color = material.color;
-
-			}
+			_color.updateStyleString();
 
 
 			_svgNode.setAttribute( 'style', 'fill: ' + _color.__styleString );
 			_svgNode.setAttribute( 'style', 'fill: ' + _color.__styleString );
 
 
@@ -358,19 +343,11 @@ THREE.SVGRenderer = function () {
 
 
 			}
 			}
 
 
-			if ( _enableLighting ) {
-
-				_color.copy( _ambientLight );
+			_color.copy( _ambientLight );
 
 
-				calculateLight( _lights, element.centroidModel, element.normalModel, _color );
+			calculateLight( _lights, element.centroidModel, element.normalModel, _color );
 
 
-				_color.multiply( _diffuseColor ).add( _emissiveColor );
-
-			} else {
-
-				_color.copy( _diffuseColor );
-
-			}
+			_color.multiply( _diffuseColor ).add( _emissiveColor );
 
 
 		} else if ( material instanceof THREE.MeshDepthMaterial ) {
 		} else if ( material instanceof THREE.MeshDepthMaterial ) {
 
 
@@ -428,19 +405,11 @@ THREE.SVGRenderer = function () {
 
 
 			}
 			}
 
 
-			if ( _enableLighting ) {
-
-				_color.copy( _ambientLight );
+			_color.copy( _ambientLight );
 
 
-				calculateLight( _lights, element.centroidModel, element.normalModel, _color );
+			calculateLight( _lights, element.centroidModel, element.normalModel, _color );
 
 
-				_color.multiply( _diffuseColor ).add( _emissiveColor );
-
-			} else {
-
-				_color.copy( _diffuseColor );
-
-			}
+			_color.multiply( _diffuseColor ).add( _emissiveColor );
 
 
 		} else if ( material instanceof THREE.MeshDepthMaterial ) {
 		} else if ( material instanceof THREE.MeshDepthMaterial ) {
 
 

+ 43 - 76
src/renderers/CanvasRenderer.js

@@ -63,7 +63,6 @@ THREE.CanvasRenderer = function ( parameters ) {
 	_clearBox = new THREE.Box2(),
 	_clearBox = new THREE.Box2(),
 	_elemBox = new THREE.Box2(),
 	_elemBox = new THREE.Box2(),
 
 
-	_enableLighting = false,
 	_ambientLight = new THREE.Color(),
 	_ambientLight = new THREE.Color(),
 	_directionalLights = new THREE.Color(),
 	_directionalLights = new THREE.Color(),
 	_pointLights = new THREE.Color(),
 	_pointLights = new THREE.Color(),
@@ -276,13 +275,7 @@ THREE.CanvasRenderer = function ( parameters ) {
 		_context.fillRect( _clipBox.min.x, _clipBox.min.y, _clipBox.max.x - _clipBox.min.x, _clipBox.max.y - _clipBox.min.y );
 		_context.fillRect( _clipBox.min.x, _clipBox.min.y, _clipBox.max.x - _clipBox.min.x, _clipBox.max.y - _clipBox.min.y );
 		*/
 		*/
 
 
-		_enableLighting = _lights.length > 0;
-
-		if ( _enableLighting === true ) {
-
-			 calculateLights();
-
-		}
+		calculateLights();
 
 
 		for ( var e = 0, el = _elements.length; e < el; e++ ) {
 		for ( var e = 0, el = _elements.length; e < el; e++ ) {
 
 
@@ -641,46 +634,36 @@ THREE.CanvasRenderer = function ( parameters ) {
 
 
 				}
 				}
 
 
-				if ( _enableLighting === true ) {
-
-					if ( material.wireframe === false && material.shading == THREE.SmoothShading && element.vertexNormalsLength == 3 ) {
-
-						_color1.copy( _ambientLight );
-						_color2.copy( _ambientLight );
-						_color3.copy( _ambientLight );
-
-						calculateLight( element.v1.positionWorld, element.vertexNormalsModel[ 0 ], _color1 );
-						calculateLight( element.v2.positionWorld, element.vertexNormalsModel[ 1 ], _color2 );
-						calculateLight( element.v3.positionWorld, element.vertexNormalsModel[ 2 ], _color3 );
-
-						_color1.multiply( _diffuseColor ).add( _emissiveColor );
-						_color2.multiply( _diffuseColor ).add( _emissiveColor );
-						_color3.multiply( _diffuseColor ).add( _emissiveColor );
-						_color4.addColors( _color2, _color3 ).multiplyScalar( 0.5 );
+				if ( material.wireframe === false && material.shading == THREE.SmoothShading && element.vertexNormalsLength == 3 ) {
 
 
-						_image = getGradientTexture( _color1, _color2, _color3, _color4 );
+					_color1.copy( _ambientLight );
+					_color2.copy( _ambientLight );
+					_color3.copy( _ambientLight );
 
 
-						clipImage( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, 0, 0, 1, 0, 0, 1, _image );
+					calculateLight( element.v1.positionWorld, element.vertexNormalsModel[ 0 ], _color1 );
+					calculateLight( element.v2.positionWorld, element.vertexNormalsModel[ 1 ], _color2 );
+					calculateLight( element.v3.positionWorld, element.vertexNormalsModel[ 2 ], _color3 );
 
 
-					} else {
+					_color1.multiply( _diffuseColor ).add( _emissiveColor );
+					_color2.multiply( _diffuseColor ).add( _emissiveColor );
+					_color3.multiply( _diffuseColor ).add( _emissiveColor );
+					_color4.addColors( _color2, _color3 ).multiplyScalar( 0.5 );
 
 
-						_color.copy( _ambientLight );
+					_image = getGradientTexture( _color1, _color2, _color3, _color4 );
 
 
-						calculateLight( element.centroidModel, element.normalModel, _color );
+					clipImage( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, 0, 0, 1, 0, 0, 1, _image );
 
 
-						_color.multiply( _diffuseColor ).add( _emissiveColor );
+				} else {
 
 
-						material.wireframe === true
-							? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )
-							: fillPath( _color );
+					_color.copy( _ambientLight );
 
 
-					}
+					calculateLight( element.centroidModel, element.normalModel, _color );
 
 
-				} else {
+					_color.multiply( _diffuseColor ).add( _emissiveColor );
 
 
 					material.wireframe === true
 					material.wireframe === true
-						? strokePath( material.color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )
-						: fillPath( material.color );
+						? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )
+						: fillPath( _color );
 
 
 				}
 				}
 
 
@@ -825,54 +808,40 @@ THREE.CanvasRenderer = function ( parameters ) {
 
 
 				}
 				}
 
 
-				if ( _enableLighting === true ) {
+				if ( material.wireframe === false && material.shading == THREE.SmoothShading && element.vertexNormalsLength == 4 ) {
 
 
-					if ( material.wireframe === false && material.shading == THREE.SmoothShading && element.vertexNormalsLength == 4 ) {
+					_color1.copy( _ambientLight );
+					_color2.copy( _ambientLight );
+					_color3.copy( _ambientLight );
+					_color4.copy( _ambientLight );
 
 
-						_color1.copy( _ambientLight );
-						_color2.copy( _ambientLight );
-						_color3.copy( _ambientLight );
-						_color4.copy( _ambientLight );
+					calculateLight( element.v1.positionWorld, element.vertexNormalsModel[ 0 ], _color1 );
+					calculateLight( element.v2.positionWorld, element.vertexNormalsModel[ 1 ], _color2 );
+					calculateLight( element.v4.positionWorld, element.vertexNormalsModel[ 3 ], _color3 );
+					calculateLight( element.v3.positionWorld, element.vertexNormalsModel[ 2 ], _color4 );
 
 
-						calculateLight( element.v1.positionWorld, element.vertexNormalsModel[ 0 ], _color1 );
-						calculateLight( element.v2.positionWorld, element.vertexNormalsModel[ 1 ], _color2 );
-						calculateLight( element.v4.positionWorld, element.vertexNormalsModel[ 3 ], _color3 );
-						calculateLight( element.v3.positionWorld, element.vertexNormalsModel[ 2 ], _color4 );
+					_color1.multiply( _diffuseColor ).add( _emissiveColor );
+					_color2.multiply( _diffuseColor ).add( _emissiveColor );
+					_color3.multiply( _diffuseColor ).add( _emissiveColor );
+					_color4.multiply( _diffuseColor ).add( _emissiveColor );
 
 
-						_color1.multiply( _diffuseColor ).add( _emissiveColor );
-						_color2.multiply( _diffuseColor ).add( _emissiveColor );
-						_color3.multiply( _diffuseColor ).add( _emissiveColor );
-						_color4.multiply( _diffuseColor ).add( _emissiveColor );
-
-						_image = getGradientTexture( _color1, _color2, _color3, _color4 );
-
-						// TODO: UVs are incorrect, v4->v3?
-
-						drawTriangle( _v1x, _v1y, _v2x, _v2y, _v4x, _v4y );
-						clipImage( _v1x, _v1y, _v2x, _v2y, _v4x, _v4y, 0, 0, 1, 0, 0, 1, _image );
-
-						drawTriangle( _v5x, _v5y, _v3x, _v3y, _v6x, _v6y );
-						clipImage( _v5x, _v5y, _v3x, _v3y, _v6x, _v6y, 1, 0, 1, 1, 0, 1, _image );
-
-					} else {
-
-						_color.copy( _ambientLight );
+					_image = getGradientTexture( _color1, _color2, _color3, _color4 );
 
 
-						calculateLight( element.centroidModel, element.normalModel, _color );
+					// TODO: UVs are incorrect, v4->v3?
 
 
-						_color.multiply( _diffuseColor ).add( _emissiveColor );
+					drawTriangle( _v1x, _v1y, _v2x, _v2y, _v4x, _v4y );
+					clipImage( _v1x, _v1y, _v2x, _v2y, _v4x, _v4y, 0, 0, 1, 0, 0, 1, _image );
 
 
-						drawQuad( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, _v4x, _v4y );
+					drawTriangle( _v5x, _v5y, _v3x, _v3y, _v6x, _v6y );
+					clipImage( _v5x, _v5y, _v3x, _v3y, _v6x, _v6y, 1, 0, 1, 1, 0, 1, _image );
 
 
-						material.wireframe === true
-							? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )
-							: fillPath( _color );
+				} else {
 
 
-					}
+					_color.copy( _ambientLight );
 
 
-				} else {
+					calculateLight( element.centroidModel, element.normalModel, _color );
 
 
-					_color.addColors( _diffuseColor, _emissiveColor );
+					_color.multiply( _diffuseColor ).add( _emissiveColor );
 
 
 					drawQuad( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, _v4x, _v4y );
 					drawQuad( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, _v4x, _v4y );
 
 
@@ -937,8 +906,6 @@ THREE.CanvasRenderer = function ( parameters ) {
 
 
 				}
 				}
 
 
-
-
 			} else if ( material instanceof THREE.MeshDepthMaterial ) {
 			} else if ( material instanceof THREE.MeshDepthMaterial ) {
 
 
 				_near = camera.near;
 				_near = camera.near;