|
@@ -62,8 +62,6 @@ THREE.CanvasRenderer = function ( parameters ) {
|
|
|
|
|
|
_patterns = {},
|
|
|
|
|
|
- _near, _far,
|
|
|
-
|
|
|
_image, _uvs,
|
|
|
_uv1x, _uv1y, _uv2x, _uv2y, _uv3x, _uv3y,
|
|
|
|
|
@@ -77,29 +75,7 @@ THREE.CanvasRenderer = function ( parameters ) {
|
|
|
|
|
|
_vector3 = new THREE.Vector3(), // Needed for PointLight
|
|
|
_normal = new THREE.Vector3(),
|
|
|
- _normalViewMatrix = new THREE.Matrix3(),
|
|
|
-
|
|
|
- _pixelMap, _pixelMapContext, _pixelMapImage, _pixelMapData,
|
|
|
- _gradientMap, _gradientMapContext, _gradientMapQuality = 16;
|
|
|
-
|
|
|
- _pixelMap = document.createElement( 'canvas' );
|
|
|
- _pixelMap.width = _pixelMap.height = 2;
|
|
|
-
|
|
|
- _pixelMapContext = _pixelMap.getContext( '2d' );
|
|
|
- _pixelMapContext.fillStyle = 'rgba(0,0,0,1)';
|
|
|
- _pixelMapContext.fillRect( 0, 0, 2, 2 );
|
|
|
-
|
|
|
- _pixelMapImage = _pixelMapContext.getImageData( 0, 0, 2, 2 );
|
|
|
- _pixelMapData = _pixelMapImage.data;
|
|
|
-
|
|
|
- _gradientMap = document.createElement( 'canvas' );
|
|
|
- _gradientMap.width = _gradientMap.height = _gradientMapQuality;
|
|
|
-
|
|
|
- _gradientMapContext = _gradientMap.getContext( '2d' );
|
|
|
- _gradientMapContext.translate( - _gradientMapQuality / 2, - _gradientMapQuality / 2 );
|
|
|
- _gradientMapContext.scale( _gradientMapQuality, _gradientMapQuality );
|
|
|
-
|
|
|
- _gradientMapQuality --; // Fix UVs
|
|
|
+ _normalViewMatrix = new THREE.Matrix3();
|
|
|
|
|
|
// dash+gap fallbacks for Firefox and everything else
|
|
|
|
|
@@ -663,38 +639,15 @@ THREE.CanvasRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- 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 );
|
|
|
-
|
|
|
- _image = getGradientTexture( _color1, _color2, _color3, _color4 );
|
|
|
+ _color.copy( _ambientLight );
|
|
|
|
|
|
- clipImage( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, 0, 0, 1, 0, 0, 1, _image );
|
|
|
+ calculateLight( element.centroidModel, element.normalModel, _color );
|
|
|
|
|
|
- } else {
|
|
|
-
|
|
|
- _color.copy( _ambientLight );
|
|
|
-
|
|
|
- calculateLight( element.centroidModel, element.normalModel, _color );
|
|
|
-
|
|
|
- _color.multiply( _diffuseColor ).add( _emissiveColor );
|
|
|
-
|
|
|
- material.wireframe === true
|
|
|
- ? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )
|
|
|
- : fillPath( _color );
|
|
|
+ _color.multiply( _diffuseColor ).add( _emissiveColor );
|
|
|
|
|
|
- }
|
|
|
+ material.wireframe === true
|
|
|
+ ? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )
|
|
|
+ : fillPath( _color );
|
|
|
|
|
|
} else if ( material instanceof THREE.MeshBasicMaterial || material instanceof THREE.MeshLambertMaterial || material instanceof THREE.MeshPhongMaterial ) {
|
|
|
|
|
@@ -707,7 +660,6 @@ THREE.CanvasRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
} else if ( material.envMap !== null ) {
|
|
|
|
|
|
if ( material.envMap.mapping instanceof THREE.SphericalReflectionMapping ) {
|
|
@@ -751,48 +703,21 @@ THREE.CanvasRenderer = function ( parameters ) {
|
|
|
|
|
|
} else if ( material instanceof THREE.MeshDepthMaterial ) {
|
|
|
|
|
|
- _near = _camera.near;
|
|
|
- _far = _camera.far;
|
|
|
-
|
|
|
- _color1.r = _color1.g = _color1.b = 1 - smoothstep( v1.positionScreen.z * v1.positionScreen.w, _near, _far );
|
|
|
- _color2.r = _color2.g = _color2.b = 1 - smoothstep( v2.positionScreen.z * v2.positionScreen.w, _near, _far );
|
|
|
- _color3.r = _color3.g = _color3.b = 1 - smoothstep( v3.positionScreen.z * v3.positionScreen.w, _near, _far );
|
|
|
- _color4.addColors( _color2, _color3 ).multiplyScalar( 0.5 );
|
|
|
-
|
|
|
- _image = getGradientTexture( _color1, _color2, _color3, _color4 );
|
|
|
+ _color.r = _color.g = _color.b = 1 - smoothstep( v1.positionScreen.z * v1.positionScreen.w, _camera.near, _camera.far );
|
|
|
|
|
|
- clipImage( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, 0, 0, 1, 0, 0, 1, _image );
|
|
|
-
|
|
|
- } else if ( material instanceof THREE.MeshNormalMaterial ) {
|
|
|
-
|
|
|
- if ( material.shading === THREE.FlatShading ) {
|
|
|
-
|
|
|
- _normal.copy( element.normalModel ).applyMatrix3( _normalViewMatrix );
|
|
|
-
|
|
|
- _color.setRGB( _normal.x, _normal.y, _normal.z ).multiplyScalar( 0.5 ).addScalar( 0.5 );
|
|
|
-
|
|
|
- material.wireframe === true
|
|
|
+ material.wireframe === true
|
|
|
? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )
|
|
|
: fillPath( _color );
|
|
|
|
|
|
- } else if ( material.shading === THREE.SmoothShading ) {
|
|
|
-
|
|
|
- _normal.copy( element.vertexNormalsModel[ uv1 ] ).applyMatrix3( _normalViewMatrix );
|
|
|
- _color1.setRGB( _normal.x, _normal.y, _normal.z ).multiplyScalar( 0.5 ).addScalar( 0.5 );
|
|
|
-
|
|
|
- _normal.copy( element.vertexNormalsModel[ uv2 ] ).applyMatrix3( _normalViewMatrix );
|
|
|
- _color2.setRGB( _normal.x, _normal.y, _normal.z ).multiplyScalar( 0.5 ).addScalar( 0.5 );
|
|
|
-
|
|
|
- _normal.copy( element.vertexNormalsModel[ uv3 ] ).applyMatrix3( _normalViewMatrix );
|
|
|
- _color3.setRGB( _normal.x, _normal.y, _normal.z ).multiplyScalar( 0.5 ).addScalar( 0.5 );
|
|
|
+ } else if ( material instanceof THREE.MeshNormalMaterial ) {
|
|
|
|
|
|
- _color4.addColors( _color2, _color3 ).multiplyScalar( 0.5 );
|
|
|
+ _normal.copy( element.normalModel ).applyMatrix3( _normalViewMatrix );
|
|
|
|
|
|
- _image = getGradientTexture( _color1, _color2, _color3, _color4 );
|
|
|
+ _color.setRGB( _normal.x, _normal.y, _normal.z ).multiplyScalar( 0.5 ).addScalar( 0.5 );
|
|
|
|
|
|
- clipImage( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, 0, 0, 1, 0, 0, 1, _image );
|
|
|
-
|
|
|
- }
|
|
|
+ material.wireframe === true
|
|
|
+ ? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )
|
|
|
+ : fillPath( _color );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -976,33 +901,6 @@ THREE.CanvasRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- function getGradientTexture( color1, color2, color3, color4 ) {
|
|
|
-
|
|
|
- // http://mrdoob.com/blog/post/710
|
|
|
-
|
|
|
- _pixelMapData[ 0 ] = ( color1.r * 255 ) | 0;
|
|
|
- _pixelMapData[ 1 ] = ( color1.g * 255 ) | 0;
|
|
|
- _pixelMapData[ 2 ] = ( color1.b * 255 ) | 0;
|
|
|
-
|
|
|
- _pixelMapData[ 4 ] = ( color2.r * 255 ) | 0;
|
|
|
- _pixelMapData[ 5 ] = ( color2.g * 255 ) | 0;
|
|
|
- _pixelMapData[ 6 ] = ( color2.b * 255 ) | 0;
|
|
|
-
|
|
|
- _pixelMapData[ 8 ] = ( color3.r * 255 ) | 0;
|
|
|
- _pixelMapData[ 9 ] = ( color3.g * 255 ) | 0;
|
|
|
- _pixelMapData[ 10 ] = ( color3.b * 255 ) | 0;
|
|
|
-
|
|
|
- _pixelMapData[ 12 ] = ( color4.r * 255 ) | 0;
|
|
|
- _pixelMapData[ 13 ] = ( color4.g * 255 ) | 0;
|
|
|
- _pixelMapData[ 14 ] = ( color4.b * 255 ) | 0;
|
|
|
-
|
|
|
- _pixelMapContext.putImageData( _pixelMapImage, 0, 0 );
|
|
|
- _gradientMapContext.drawImage( _pixelMap, 0, 0 );
|
|
|
-
|
|
|
- return _gradientMap;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
// Hide anti-alias gaps
|
|
|
|
|
|
function expand( v1, v2, pixels ) {
|