這個函數改編自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