gpt4 book ai didi

c++ - 使用 OpenGL 无法正确显示三角形带

转载 作者:行者123 更新时间:2023-11-27 23:49:55 27 4
gpt4 key购买 nike

我在 C++ 中实现了一个函数,为三角形带(2 x N 个三角形)生成 N 段,稍后打印(如 GL_TRIANGLE_STRIP) 通过另一个函数。在这里,我向您展示我目前所拥有的:

void strip(
std::uint32_t N,
std::vector<glm::vec3>* vertices)
{

vertices->clear();

for (std::uint32_t j=0; j<=N; ++j)
{
for (std::uint32_t i=1; i<=N; ++i)
{
float x = (float)i/(float)N;
float y = (float)j/(float)N;
vertices->push_back(glm::vec3(x, y, 0));
}
}
}

所以看起来像下图(对于N = 3):

    ^
| ----------
| | /| /| /|
y | |/ |/ |/ |
| ----------
|
|-------------->
x

但实际上看起来是这样的:

My triangle strip

有什么建议吗?我的想法是我没有以正确的顺序生成点。

最佳答案

你的逻辑不好生成一条三角形。让我试着解释一下我的:

    ^
| 0--2--4--6
| | /| /| /|
y | |/ |/ |/ |
| 1--3--5--7
|
|-------------->
x

如您所见,三角形 0 由顶点 0、1 和 2 组成,而三角形 1 由顶点 1、2 和 3 组成,依此类推。因此,要生成此 strip ,您需要在一行中生成奇数索引,在另一行中生成偶数索引。让我们尝试使用代码生成顶点:

void strip(std::uint32_t N, std::vector<glm::vec3>* vertices)
{
vertices->clear();

for (std::uint32_t j=0; j < N + 1; ++j)
{
float x = (float)j/(float)N;
vertices->push_back(glm::vec3(x, 1, 0)); // even row
vertices->push_back(glm::vec3(x, 0, 0)); // odd row
}
}

关于c++ - 使用 OpenGL 无法正确显示三角形带,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47210527/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com