1

我正在尝试使用指数贴图在网格上贴花草图。在生成指数图时,我通过网格上的初始点计算平面,并按该点在网格上计算法线。然后算法计算距该点最近的顶点并通过边遍历它们。

然后将边缘以其原始长度投影在平面上。它在大多数情况下都有效,但在球体的情况下存在问题。地图越来越扭曲。

我需要为球体做任何不同的事情吗?关于如何解决这个问题的任何想法?或者有没有人使用不同的指数映射算法做过类似的事情?

我创建了下面的代码

while (i < lstVerts.size())
{
    CVertex *pVertex = mesh.getVertexAt(lstVerts[i]);
    pVertex->m_iExpPos = i;

    if (pVertex->m_iNeighbour > -1)
    {
        CVector vecPoint = pVertex->toVector() - pVertex->Neighbour()->toVector();
        double len = vecPoint.norm();
        CVector tmp = (pVertex->Neighbour()->normal() * -1) * vecPoint;
        vec = tmp * sketch.m_meshNorm; 
        vec.unitize();
        vec = vec * len;

        double u = vec.dot(sketch.m_meshX);
        pVertex->m_u = u + pVertex->Neighbour()->m_u; 
        double v = vec.dot(yDir);
        pVertex->m_v = v + pVertex->Neighbour()->m_v;
    }
    else
    {
        vec = pVertex->toVector() - pnt;
        pVertex->m_u = vec.dot(sketch.m_meshX);
        pVertex->m_v = vec.dot(yDir);
        pVertex->m_Propogation = vec;
    }

    AddAdjacentUnvisitedVertices(pVertex, lstVerts);
}

pnt 是指数映射开始的点。最初,lstVerts 将包含靠近 pnt 的顶点。逐渐它会添加相邻的顶点。

我认为问题是算法使用边缘长度,因为它在指数图中。我认为需要调整。我不知道怎么办?

要了解我使用过的指数映射和算法,请参考以下链接

http://www.diva-portal.org/smash/get/diva2:331960/FULLTEXT01.pdf

http://www1.cse.wustl.edu/~cmg/content/papers/sig2006tm/sig2006tm.pdf

4

0 回答 0