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

Optimised GeometryUtils::merge

上级 4d815f17
var GeometryUtils = {
merge: function ( object1, object2 ) {
merge: function ( geometry1, object2 /* mesh | geometry */ ) {
var isMesh = object2 instanceof THREE.Mesh;
var geometry1 = object1,
var isMesh = object2 instanceof THREE.Mesh,
vertexPosition = geometry1.vertices.length,
facePosition = geometry1.faces.length,
uvPosition = geometry1.uvs.length,
geometry2 = isMesh ? object2.geometry : object2;
geometry2 = isMesh ? object2.geometry : object2,
vertices1 = geometry1.vertices,
vertices2 = geometry2.vertices,
faces1 = geometry1.faces,
faces2 = geometry2.faces,
uvs1 = geometry1.uvs,
uvs2 = geometry2.uvs;
if ( isMesh ) object2.updateMatrix();
isMesh && object2.updateMatrix();
for ( var i = 0, il = geometry2.vertices.length; i < il; i ++ ) {
for ( var i = 0, il = vertices2.length; i < il; i ++ ) {
var vertex = geometry2.vertices[ i ];
var vertex = vertices2[ i ];
var vertexCopy = new THREE.Vertex( vertex.position.clone() );
if ( isMesh ) object2.matrix.transform( vertexCopy.position );
isMesh && object2.matrix.transform( vertexCopy.position );
geometry1.vertices.push( vertexCopy );
vertices1.push( vertexCopy );
}
for ( var i = 0, il = geometry2.faces.length; i < il; i ++ ) {
for ( var i = 0, il = faces2.length; i < il; i ++ ) {
var face = geometry2.faces[ i ];
var face = faces2[ i ], faceCopy, normal,
faceVertexNormals = face.vertexNormals;
if ( face instanceof THREE.Face3 ) {
var faceCopy = new THREE.Face3();
faceCopy.a = face.a + vertexPosition;
faceCopy.b = face.b + vertexPosition;
faceCopy.c = face.c + vertexPosition;
faceCopy = new THREE.Face3( face.a + vertexPosition, face.b + vertexPosition, face.c + vertexPosition );
} else if ( face instanceof THREE.Face4 ) {
var faceCopy = new THREE.Face4();
faceCopy.a = face.a + vertexPosition;
faceCopy.b = face.b + vertexPosition;
faceCopy.c = face.c + vertexPosition;
faceCopy.d = face.d + vertexPosition;
faceCopy = new THREE.Face4( face.a + vertexPosition, face.b + vertexPosition, face.c + vertexPosition, face.d + vertexPosition );
}
for ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {
for ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {
var normal = face.vertexNormals[ j ];
normal = faceVertexNormals[ j ];
faceCopy.vertexNormals.push( normal.clone() );
}
geometry1.faces.push( faceCopy );
faces1.push( faceCopy );
}
for ( var i = 0, il = geometry2.uvs.length; i < il; i ++ ) {
var uv = geometry2.uvs[ i ];
for ( var i = 0, il = uvs2.length; i < il; i ++ ) {
var uvCopy = [];
var uv = uvs2[ i ], uvCopy = [];
for ( var j = 0, jl = uv.length; j < jl; j ++ ) {
......@@ -67,7 +64,7 @@ var GeometryUtils = {
}
geometry1.uvs.push( uvCopy );
uvs1.push( uvCopy );
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册