gpt4 book ai didi

c++ - 向网格添加索引

转载 作者:行者123 更新时间:2023-11-28 05:42:28 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何将索引添加到已经具有所有顶点的形状。我可以通过顶点看到我把它们都放在了我需要的地方,但是我有一个奇怪的工件,这是由于没有正确添加索引造成的。但是我不确定如何正确添加它们。

Surface::Surface()
{
int size = 200;
ofPoint p1(0, 0, 0), p2(0, 0, size), p3(size, 0, size), p4(200, 0, 0);

s1 = new Curve(p1, p2);
s2 = new Curve(p2, p3);
s3 = new Curve(p4, p3);
s4 = new Curve(p1, p4);

for(double i = 0; i <= size; i++){
for(double j = 0; j <= size; j++){
mesh.addVertex(getPoint(i, j));
}
}

int width = size, height = size;
for (int y = 0; y<=height; y++){
for (int x=0; x<=width; x++){
mesh.addIndex(x+y*width);
mesh.addIndex((x+1)+y*width);
mesh.addIndex(x+(y+1)*width);

mesh.addIndex((x+1)+y*width);
mesh.addIndex((x+1)+(y+1)*width);
mesh.addIndex(x+(y+1)*width);
}
}
}

绘制顶点的结果:

enter image description here

但是索引连接的点太多了,我不确定应该如何连接哪些点。绘制线框:

enter image description here

也许这个问题适合凹形?当他们想向网格添加索引时,每个人似乎都或多或少地做同样的事情

最佳答案

您在每个维度中添加 size+1 个顶点:

for(double i = 0; i <= size; i++){
for(double j = 0; j <= size; j++){
mesh.addVertex(getPoint(i, j));
}
}

但随后在每个维度中索引 size+2 个顶点,因为 x 和 y 可以等于大小,并且在循环中添加 1:

int width = size, height = size;
for (int y = 0; y<=height; y++){
for (int x=0; x<=width; x++){
mesh.addIndex(x+y*width);
mesh.addIndex((x+1)+y*width);
mesh.addIndex(x+(y+1)*width);

mesh.addIndex((x+1)+y*width);
mesh.addIndex((x+1)+(y+1)*width);
mesh.addIndex(x+(y+1)*width);
}
}

这将导致垃圾顶点被索引。要解决此问题,只需将循环条件更改为 < width 和 < height。

int width = size, height = size;
for (int y = 0; y<height; y++){
for (int x=0; x<width; x++){
mesh.addIndex(x+y*width);
mesh.addIndex((x+1)+y*width);
mesh.addIndex(x+(y+1)*width);

mesh.addIndex((x+1)+y*width);
mesh.addIndex((x+1)+(y+1)*width);
mesh.addIndex(x+(y+1)*width);
}
}

从概念上讲,您需要创建一个比顶点少的图元。最简单的想象形式是 if size == 1。您需要创建 2 个顶点,但只需要创建 1 个四边形。

关于c++ - 向网格添加索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36843078/

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