Browse Source

CanvasRenderer: Fixed MeshDepthMaterial.

Mr.doob 12 years ago
parent
commit
d730415ebd
2 changed files with 12 additions and 9 deletions
  1. 5 2
      src/core/Projector.js
  2. 7 7
      src/renderers/CanvasRenderer.js

+ 5 - 2
src/core/Projector.js

@@ -173,7 +173,7 @@ THREE.Projector = function() {
 
 	this.projectScene = function ( scene, camera, sortObjects, sortElements ) {
 
-		var near = camera.near, far = camera.far, visible = false,
+		var visible = false,
 		o, ol, v, vl, f, fl, n, nl, c, cl, u, ul, object,
 		geometry, vertices, vertex, vertexPositionScreen,
 		faces, face, faceVertexNormals, faceVertexUvs, uvs,
@@ -231,7 +231,10 @@ THREE.Projector = function() {
 
 					_vertex.positionScreen.copy( _vertex.positionWorld );
 					_vertex.positionScreen.applyMatrix4( _viewProjectionMatrix );
-					_vertex.positionScreen.multiplyScalar( 1 / _vertex.positionScreen.w );
+
+					_vertex.positionScreen.x /= _vertex.positionScreen.w;
+					_vertex.positionScreen.y /= _vertex.positionScreen.w;
+					_vertex.positionScreen.z /= _vertex.positionScreen.w;
 
 					_vertex.visible = _vertex.positionScreen.z > -1 && _vertex.positionScreen.z < 1;
 

+ 7 - 7
src/renderers/CanvasRenderer.js

@@ -686,13 +686,13 @@ THREE.CanvasRenderer = function ( parameters ) {
 
 				var depth;
 
-				depth = 1 - smoothstep( v1.positionScreen.z, _near, _far );
+				depth = 1 - smoothstep( v1.positionScreen.z * v1.positionScreen.w, _near, _far );
 				_color1.setRGB( depth, depth, depth );
 
-				depth = 1 - smoothstep( v2.positionScreen.z, _near, _far )
+				depth = 1 - smoothstep( v2.positionScreen.z * v2.positionScreen.w, _near, _far )
 				_color2.setRGB( depth, depth, depth );
 
-				depth = 1 - smoothstep( v3.positionScreen.z, _near, _far );
+				depth = 1 - smoothstep( v3.positionScreen.z * v3.positionScreen.w, _near, _far );
 				_color3.setRGB( depth, depth, depth );
 
 				_color4.addColors( _color2, _color3 ).multiplyScalar( 0.5 );
@@ -894,10 +894,10 @@ THREE.CanvasRenderer = function ( parameters ) {
 				_near = camera.near;
 				_far = camera.far;
 
-				_color1.r = _color1.g = _color1.b = 1 - smoothstep( v1.positionScreen.z, _near, _far );
-				_color2.r = _color2.g = _color2.b = 1 - smoothstep( v2.positionScreen.z, _near, _far );
-				_color3.r = _color3.g = _color3.b = 1 - smoothstep( v4.positionScreen.z, _near, _far );
-				_color4.r = _color4.g = _color4.b = 1 - smoothstep( v3.positionScreen.z, _near, _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( v4.positionScreen.z * v4.positionScreen.w, _near, _far );
+				_color4.r = _color4.g = _color4.b = 1 - smoothstep( v3.positionScreen.z * v3.positionScreen.w, _near, _far );
 
 				_image = getGradientTexture( _color1, _color2, _color3, _color4 );