我正在尝试使用指数贴图在网格上贴花草图。在生成指数图时,我通过网格上的初始点计算平面,并按该点在网格上计算法线。然后算法计算距该点最近的顶点并通过边遍历它们。
然后将边缘以其原始长度投影在平面上。它在大多数情况下都有效,但在球体的情况下存在问题。地图越来越扭曲。
我需要为球体做任何不同的事情吗?关于如何解决这个问题的任何想法?或者有没有人使用不同的指数映射算法做过类似的事情?
我创建了下面的代码
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