提交 286a65b7 编写于 作者: M Mr.doob

Made CanvasRenderer and SVGRenderer behave like WebGLRenderer with...

Made CanvasRenderer and SVGRenderer behave like WebGLRenderer with MeshLambertMaterial and no lights.
上级 f2da4233
......@@ -17,7 +17,6 @@ THREE.SVGRenderer = function () {
_clipBox = new THREE.Box2(),
_elemBox = new THREE.Box2(),
_enableLighting = false,
_color = new THREE.Color(),
_diffuseColor = new THREE.Color(),
_emissiveColor = new THREE.Color(),
......@@ -111,13 +110,7 @@ THREE.SVGRenderer = function () {
_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 ++ ) {
......@@ -283,23 +276,15 @@ THREE.SVGRenderer = function () {
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 );
......@@ -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 ) {
......@@ -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 ) {
......
......@@ -63,7 +63,6 @@ THREE.CanvasRenderer = function ( parameters ) {
_clearBox = new THREE.Box2(),
_elemBox = new THREE.Box2(),
_enableLighting = false,
_ambientLight = new THREE.Color(),
_directionalLights = 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 );
*/
_enableLighting = _lights.length > 0;
if ( _enableLighting === true ) {
calculateLights();
}
calculateLights();
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
? 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 );
......@@ -937,8 +906,6 @@ THREE.CanvasRenderer = function ( parameters ) {
}
} else if ( material instanceof THREE.MeshDepthMaterial ) {
_near = camera.near;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册