gpt4 book ai didi

three.js - 给定一个网格面,找到它的相邻面

转载 作者:行者123 更新时间:2023-12-02 20:06:03 24 4
gpt4 key购买 nike

我正在尝试有效地找到给定面的所有相邻面。我采取了一种狡猾的方法,但我想知道是否可以改进。

到目前为止,我采取的方法是在创建网格几何体后创建一个数据结构。我构建了一个数组散列,将顶点映射到由它们组成的面:

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,但它似乎与面不对应。

我是否遗漏了一些明显的东西?

谢谢/。

最佳答案

我认为

for (var fx = 0; fx < g.faces.length; fx++) {
vertexToFace[fx] = new Array();
}

应改为

for (var fx = 0; fx < g.vertices.length; fx++) {
vertexToFace[fx] = new Array();
}

否则,如果顶点数量大于面数量,vertexToFace 中似乎不会有足够的元素。您还可以使用 来简化一下

vertexToFace[fx] = [];

关于three.js - 给定一个网格面,找到它的相邻面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33073136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com