我最近在玩Away3D图书馆并且在Away3D中找到Face中心时遇到了问题。为什么Away3DLite有face.center功能而Away3D没有它?什么是替代解决方案?
答案 0 :(得分:1)
如果你想找到一个面的中心,它只是构成那个面的所有顶点的平均位置:
function getFaceCenter(f : Face) : Vector3D
{
var vert : Vertex;
var ret : Vector3D = new Vector3D;
for each (vert in f.vertices) {
ret.x += vert.x;
ret.y += vert.y;
ret.z += vert.z;
}
ret.x /= f.vertices.length;
ret.y /= f.vertices.length;
ret.z /= f.vertices.length;
return ret;
}
以上是计算平均值的非常简单的函数,尽管在3D矢量而不是简单的标量数上。该平均值是面部所有顶点的中心。
如果你需要做很多事情,可以通过阻止它分配向量来优化方法(通过传入应该写入返回值的向量)并为顶点列表长度创建一个临时变量而不是解除引用它通过两个对象引用,如min(f
和vertices
),这是不必要的重量。