c++ 将多条样条线转换为三维网格

xj3cbfub  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(116)

很抱歉,如果这是一个重复的问题,但我有以下输入,并希望生成这样的输出。
我对样条曲线如何转换成四边形网格感到困惑,我能知道我应该搜索什么术语吗?这个过程在计算机图形学中被称为什么?

示例文件:

Curve1 
https://pastebin.com/KUmk04pY
Curve2
https://pastebin.com/BrpbADE9
Curve3
https://pastebin.com/MX6vWMJg

读取曲线的示例代码:

std::vector<glm::vec3> read_cvs(std::string filename)
{
    vector<vector<string>> content;
    vector<string> row;
    string line, word;
    std::vector<glm::vec3> curve;
    fstream file(filename, ios::in);
    if (file.is_open())
    {
        while (getline(file, line))
        {
            row.clear();

            stringstream str(line);

            while (getline(str, word, ','))
                row.push_back(word);
            content.push_back(row);
        }
    }
    else
        cout << "Could not open the file\n";

    int c = 0;
    for (int i = 0; i < content.size(); i++)
    {
        vector<float> f;
        for (int j = 0; j < content[i].size(); j++)
        {
            f.push_back(std::stof(content[i][j]));
        }

        curve.push_back(glm::vec3(f[0], f[0 + 1], f[0 + 2]));

    }
    return curve;
}
hmmo2u0o

hmmo2u0o1#

你已经得到了你需要的所有分数。

  • 加载样条曲线。
  • 遍历阵列,同时对每条曲线上的连续点之间的距离求和。
  • 当你的四边形的边达到所需的长度时,选择最近的点作为你的四边形的下一个顶点。(如果需要精确的距离,你也可以在给定的点之间外推找到一个点。

在上传的图形中,“四边形”实际上是直线。selected(通过彼此之间的距离)样条上的直线由给定点之间的许多直线组成,以匹配样条的曲线,而跨越这些直线的直线是使用glLine()或等效方法在每个给定样条上使用上述算法选择的点之间绘制的。
在视觉示例中可以清楚地看到,通过非线性外推创建了额外的点(“样条”),这并没有真正使代码变得更复杂,但确实增加了生成图形所需的点数。
我建议你只从给定的点开始。外推可以在工作的时候添加。无论你写了什么代码,只要有额外的样条作为输入,就可以重用。
选择绘图所需的所有点听起来有点乏味,的确如此。这是此类操作的标准过程。

相关问题