在three.js中如何獲取模型的邊線呢(不包含相鄰三角面片的共邊)

這個函數改編自three.js EdgesGeometry的源碼:函數

function showEdges( geometry ) {
	var edge = [ 0, 0 ], edges = {}, edge1, edge2;
	var key, keys = [ 'a', 'b', 'c' ];
	var geometry2;
	if ( geometry.isBufferGeometry ) {
		geometry2 = new THREE.Geometry();
		geometry2.fromBufferGeometry( geometry );
	} else {
		geometry2 = geometry.clone();
	}
	geometry2.mergeVertices();
	geometry2.computeFaceNormals();
	sourceVertices = geometry2.vertices;
	var faces = geometry2.faces;
	for ( var i = 0, l = faces.length; i < l; i ++ ) {
		var face = faces[ i ];

		for ( var j = 0; j < 3; j ++ ) {
			edge1 = face[ keys[ j ] ];
			edge2 = face[ keys[ ( j + 1 ) % 3 ] ];
			edge[ 0 ] = Math.min( edge1, edge2 );
			edge[ 1 ] = Math.max( edge1, edge2 );
			key = edge[ 0 ] + ',' + edge[ 1 ];
			if ( edges[ key ] === undefined ) {
				edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined };
			} else {
				edges[ key ].face2 = i;
			}
		}
	}
	return edges
}

而後將edges相鄰三角面過濾掉就行,機制就是face1,和face2是否相差爲1spa

for  ( var    key   in   edges  ) {
         var   e  =  edges key  ];
         if ( Math . abs ( e . face1  -  e . face2 ) <=  1 ){
             continue ;
        }
        your code......

}code

相關文章
相關標籤/搜索