很抱歉,如果这是一个重复的问题,但我有以下输入,并希望生成这样的输出。
我对样条曲线如何转换成四边形网格感到困惑,我能知道我应该搜索什么术语吗?这个过程在计算机图形学中被称为什么?
示例文件:
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;
}
1条答案
按热度按时间hmmo2u0o1#
你已经得到了你需要的所有分数。
在上传的图形中,“四边形”实际上是直线。selected(通过彼此之间的距离)样条上的直线由给定点之间的许多直线组成,以匹配样条的曲线,而跨越这些直线的直线是使用glLine()或等效方法在每个给定样条上使用上述算法选择的点之间绘制的。
在视觉示例中可以清楚地看到,通过非线性外推创建了额外的点(“样条”),这并没有真正使代码变得更复杂,但确实增加了生成图形所需的点数。
我建议你只从给定的点开始。外推可以在工作的时候添加。无论你写了什么代码,只要有额外的样条作为输入,就可以重用。
选择绘图所需的所有点听起来有点乏味,的确如此。这是此类操作的标准过程。