Я пытаюсь эффективно найти все соседние грани данного лица. Я принимаю лукавый подход, но мне интересно, можно ли улучшить его.Учитывая лицо сетки, найдите его соседние грани
Подход, который я сделал до сих пор, заключается в создании структуры данных после создания моей геометрии сетки. Я строй хэша массивов для отображения вершин к граням, которые состоят из них:
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, но, похоже, не соответствует грани.
Я пропустил что-то очевидное?
Thanks /.