gpt4 book ai didi

C++使用for循环绘制三角形带 - 顶点,索引

转载 作者:太空宇宙 更新时间:2023-11-04 12:31:29 28 4
gpt4 key购买 nike

我正在尝试使用三角形 strip 绘制一个平面。我了解如何手动执行此操作,但我真的很难使用 for 循环来执行此操作。到目前为止,下面的代码绘制了两个三角形。 enter image description here

//vertices for triangle strip
vertices.push_back(Point3(0,0,0));
vertices.push_back(Point3(1,0,0));
vertices.push_back(Point3(1,1,0));
vertices.push_back(Point3(0,1,0));
vertices.push_back(Point3(-1,1,0));
vertices.push_back(Point3(-1,0,0));


// indices into the arrays above for the first triangle
indices.push_back(0);
indices.push_back(1);
indices.push_back(2);
// indices for the second triangle
indices.push_back(0);
indices.push_back(2);
indices.push_back(3);
//indices for the third triangle
indices.push_back(5);
indices.push_back(0);
indices.push_back(3);
//indices for the fourth triangle
indices.push_back(5);
indices.push_back(3);
indices.push_back(4);

我必须在 x 上从 -pi 到 pi 绘制 100,在 y 上从 -pi/2 到 pi/2。有没有更简单的方法来遍历这些值并获取顶点和索引?感谢您的帮助!

编辑添加:我手动从左到右移动,但这两种方式都没有关系。

enter image description here

最佳答案

首先,您在 [-pi .. +pi] , [-pi/2 .. +pi/2] 区间内的规则网格中生成坐标

size_t sizeX = 10; 
size_t sizeY = 10;

//Generate 10x10 coordinates in interval [-pi .. +pi] , [-pi/2 .. +pi/2] , 0
std::vector<Point3>vertices(sizeX * sizeY);
for (size_t j=0; j< sizeY; j++)
for (size_t i=0; i< sizeX; i++)
vertices[j*sizeX+i] = Point3(-pi + 2*i*pi/(sizeX-1), -pi/2 + j*pi/(sizeY-1), 0);

在这个顶点网格中,每一行都有 sizeX 个元素。这意味着对于索引为 IDX 的顶点:

  • 它右边的顶点将有索引 IDX+1
  • 它上面的顶点将有索引 IDX+sizeX。

现在让我们来看看三角形。使用基于四边形的模式更容易。在顶点 IDX 中具有左下角的四边形将连接到顶点 IDX+1、IDX+sizeX、IDX+sizeX+1。

了解这一点后,您可以使用相同的 4 个角将四边形分成两个三角形。所以你编写了一个嵌套的 for 来迭代四边形,但是你创建了两个三角形而不是一个四边形。当心三角形方向。

enter image description here

//Generate triangles. Use a schema based in quads
std::vector<size_t>indices;
indices.reserve(2*(sizeX-1) * (sizeY-1));

for (size_t j=0; j< sizeY-1; j++)
{
//Set idx to point at first vertex of row j
size_t idx=j*sizeX

for (size_t i=0; i< sizeX-1; i++)
{
//Bottom triangle of the quad
indices.push_back(idx);
indices.push_back(idx+1);
indices.push_back(idx+sizeX);
//Top triangle of the quad
indices.push_back(idx+1);
indices.push_back(idx+sizeX+1);
indices.push_back(idx+sizeX);
//Move one vertex to the right
idx++;
}
}

关于C++使用for循环绘制三角形带 - 顶点,索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58462053/

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