簡體   English   中英

將多個樣條轉換為 3D Mesh

[英]Converting several splines into 3D Mesh

如果這是一個重復的問題,我很抱歉,但我有以下輸入並希望生成這樣的 output。

我對樣條線如何轉換為四邊形網格感到困惑,我能知道我應該搜索哪些術語嗎? 這個過程在計算機圖形學中叫什么?

在此處輸入圖像描述

在此處輸入圖像描述

示例文件:

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;
}

您已經擁有所需的所有積分。

  • 加載樣條曲線。
  • 走 arrays,同時計算每條曲線上連續點之間的距離。
  • 當您達到四邊形邊緣所需的長度時,選擇最近的點作為四邊形的下一個頂點。 (如果需要精確距離,您也可以推斷以在給定的點之間找到一個點。

在您上傳的圖表中,“四邊形”實際上是線條。 所選(按彼此之間的距離)樣條曲線上的線由給定點之間的許多線組成,以匹配樣條曲線,並且使用 glLine() 或使用上述算法選擇的點之間的等效線繪制交叉線在給定的每個樣條上。

在視覺示例中可以清楚地看到附加點(“樣條”)是由非線性外推法創建的,這並沒有真正使代碼更復雜,但確實增加了生成圖形。

我建議你只從給定的要點開始。 可以在可行時添加外推。 屆時您編寫的任何代碼都可以重復使用,因為添加了額外的樣條作為輸入。

選擇繪圖所需的所有點聽起來有點乏味,事實確實如此。 對於這種操作來說,這是正常的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM