我最近在玩 Away3D 库,在 Away3D 中查找人脸中心时遇到问题。为什么 Away3DLite 有 face.center 功能,而 Away3D 没有?什么是替代解决方案?
1 回答
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
) 这样的对象引用,不必要地繁重。
于 2011-08-27T08:45:52.337 回答