我正在尝试高效地查找给定面的所有相邻面。
我采取了一种巧妙的方法,但我想知道是否可以改进。
到目前为止,我采取的方法是在创建网格几何体之后创建数据结构。我建立了一个哈希数组,将顶点映射到由它们组成的面:
var vertexToFace = [];
function crossReference(g) {
for (var fx = 0; fx < g.faces.length; fx++) {
vertexToFace[fx] = new Array();
}
for (var fx = 0; fx < g.faces.length; fx++) {
var f = g.faces[fx];
var ax = f.a;
var bx = f.b;
var cx = f.c;
vertexToFace[ax].push(fx);
vertexToFace[bx].push(fx);
vertexToFace[cx].push(fx);
}
}
现在我有了数组的哈希值,就可以检索给定面的相邻面:
var neighbors = [];
neighbors.push( vertexToFace(face.a), vertexToFace(face.b), vertexToFace(face.c) );
这很好,但我想知道是否过于冗长。我知道geometry.faces中的每个面都包含成员a、b、c,它们是索引到geometry.vertices中的点的位置。
我不认为反向信息被存储,尽管令人心动的是,geometry.vertices中的每个点确实有.index成员,但似乎与面没有对应关系。
我是否漏掉了一些明显的东西?
谢谢/。