这段代码有加速吗?

时间:2016-09-29 10:51:23

标签: c++ simplify

我只是猜测是否有提高此代码性能的空间:

std::vector<int>actualUvIndex(polyCount * 3, 0);
for (int i = 0; i < actualUvIndex.size(); i++)
{
    actualUvIndex[i] = i;
}

#pragma omp parallel for schedule(dynamic)
for (int group = 0; group < groupList.size(); group++)
{
    //take care per group only
    for (int si = 0; si < groupList[group].size(); si++)
    {
        //take care per vertex
        for (int v = 0; v < 3; v++)
        {
            int externalindex = groupList[group][si]->uvindex[v];

            //if it has been changed forget about it
            if (actualUvIndex[externalindex] == externalindex)
            {
                //compare with the rest of faces inside the group
                for (int sib = si + 1; sib < groupList[group].size(); sib++)
                {
                    for (int vb = 0; vb < 3; vb++)
                    {
                        int internalindex = groupList[group][sib]->uvindex[vb];
                        //if it has been changed forget about it
                        if (actualUvIndex[internalindex] == internalindex)
                        {
                            //if both uv vertex are equal just assign the same vertex index
                            if (groupList[group][sib]->uvs[vb][0] == groupList[group][si]->uvs[v][0] && groupList[group][sib]->uvs[vb][1] == groupList[group][si]->uvs[v][1])
                                actualUvIndex[internalindex] = externalindex;
                        }

                    }
                }
            }
        }
    }
}

让我解释一下: 我的几何体(是的,它是关于3d网格)分组,因此隔离每一个都是有道理的。

每个组包含面和每个面3个顶点我可以获得访问组的每个顶点的索引 - &gt; face-&gt; uvindex。

actualUvIndex是一个管理每个顶点索引的向量。

显然我的意图是简化并分配找到冗余顶点的第一个索引,这意味着冗余共享其位置的顶点存储在uvs [] [0]和uvs [] [1]中,请注意,因为那是uvs他们只有两个轴。

关心并感谢您提前获取任何提示。

1 个答案:

答案 0 :(得分:0)

您可以使用索引搜索重复的顶点来加速代码。为顶点定义一个has函数,然后迭代顶点并将它们放入std :: unordered映射中,使用vertice作为键,索引作为值。放置它时,检查该键是否已有值:如果有,请使用映射中的索引。这样复杂性将是o(顶点数)。

相关问题