瀏覽代碼

Projector: Fixed morphtargets handling. Fixes #5933.

Mr.doob 10 年之前
父節點
當前提交
48591ba844
共有 1 個文件被更改,包括 27 次插入45 次删除
  1. 27 45
      examples/js/renderers/Projector.js

+ 27 - 45
examples/js/renderers/Projector.js

@@ -471,76 +471,58 @@ THREE.Projector = function () {
 
 					_normalMatrix.getNormalMatrix( _modelMatrix );
 
-					var isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
+					var material = object.material;
+					
+					var isFaceMaterial = material instanceof THREE.MeshFaceMaterial;
 					var objectMaterials = isFaceMaterial === true ? object.material : null;
 
 					for ( var v = 0, vl = vertices.length; v < vl; v ++ ) {
 
 						var vertex = vertices[ v ];
-						renderList.pushVertex( vertex.x, vertex.y, vertex.z );
 
-					}
-
-					for ( var f = 0, fl = faces.length; f < fl; f ++ ) {
-
-						var face = faces[ f ];
-
-						var material = isFaceMaterial === true
-							 ? objectMaterials.materials[ face.materialIndex ]
-							 : object.material;
-
-						if ( material === undefined ) continue;
-
-						var side = material.side;
-
-						var v1 = _vertexPool[ face.a ];
-						var v2 = _vertexPool[ face.b ];
-						var v3 = _vertexPool[ face.c ];
+						_vector3.copy( vertex );
 
 						if ( material.morphTargets === true ) {
 
 							var morphTargets = geometry.morphTargets;
 							var morphInfluences = object.morphTargetInfluences;
 
-							var v1p = v1.position;
-							var v2p = v2.position;
-							var v3p = v3.position;
-
-							_vA.set( 0, 0, 0 );
-							_vB.set( 0, 0, 0 );
-							_vC.set( 0, 0, 0 );
-
 							for ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {
 
 								var influence = morphInfluences[ t ];
 
 								if ( influence === 0 ) continue;
 
-								var targets = morphTargets[ t ].vertices;
+								var target = morphTargets[ t ];
+								var targetVertex = target.vertices[ v ];
 
-								_vA.x += ( targets[ face.a ].x - v1p.x ) * influence;
-								_vA.y += ( targets[ face.a ].y - v1p.y ) * influence;
-								_vA.z += ( targets[ face.a ].z - v1p.z ) * influence;
+								_vector3.x += ( targetVertex.x - vertex.x ) * influence;
+								_vector3.y += ( targetVertex.y - vertex.y ) * influence;
+								_vector3.z += ( targetVertex.z - vertex.z ) * influence;
 
-								_vB.x += ( targets[ face.b ].x - v2p.x ) * influence;
-								_vB.y += ( targets[ face.b ].y - v2p.y ) * influence;
-								_vB.z += ( targets[ face.b ].z - v2p.z ) * influence;
+							}
 
-								_vC.x += ( targets[ face.c ].x - v3p.x ) * influence;
-								_vC.y += ( targets[ face.c ].y - v3p.y ) * influence;
-								_vC.z += ( targets[ face.c ].z - v3p.z ) * influence;
+						}
 
-							}
+						renderList.pushVertex( _vector3.x, _vector3.y, _vector3.z );
+
+					}
 
-							v1.position.add( _vA );
-							v2.position.add( _vB );
-							v3.position.add( _vC );
+					for ( var f = 0, fl = faces.length; f < fl; f ++ ) {
 
-							renderList.projectVertex( v1 );
-							renderList.projectVertex( v2 );
-							renderList.projectVertex( v3 );
+						var face = faces[ f ];
 
-						}
+						var material = isFaceMaterial === true
+							 ? objectMaterials.materials[ face.materialIndex ]
+							 : object.material;
+
+						if ( material === undefined ) continue;
+
+						var side = material.side;
+
+						var v1 = _vertexPool[ face.a ];
+						var v2 = _vertexPool[ face.b ];
+						var v3 = _vertexPool[ face.c ];
 
 						if ( renderList.checkTriangleVisibility( v1, v2, v3 ) === false ) continue;