0

我最近在玩 Away3D 库,在 Away3D 中查找人脸中心时遇到问题。为什么 Away3DLite 有 face.center 功能,而 Away3D 没有?什么是替代解决方案?

4

1 回答 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 (fvertices) 这样的对象引用,不必要地繁重。

于 2011-08-27T08:45:52.337 回答