【发布时间】:2016-01-09 11:03:21
【问题描述】:
我正在尝试有效地找到给定面孔的所有相邻面孔。 我采取了一种狡猾的方法,但我想知道是否可以改进。
到目前为止,我采用的方法是在创建网格几何体后创建数据结构。我构建了一个数组哈希来将顶点映射到由它们组成的面:
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,但它似乎并不对应于面。
我是否遗漏了一些明显的东西?
谢谢/。
【问题讨论】: