2016-04-25 70 views
0

我想弄清楚如何将索引添加到已具有所有顶点的形状。我可以通过顶点看到我拥有它们的所有位置,但是由于没有正确添加索引,导致了一个奇怪的工件。不过,我不知道如何正确添加它们。将索引添加到网格

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

也许这个问题是适当的凹状?每个人似乎都做多或同样的事情少的时候,他们希望添加索引到网

回答

1

您在每个维度添加尺寸+ 1个顶点:

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

但随后指数的大小+ 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); 
    } 
} 

这将导致垃圾顶点被索引。要修复,只需将环路条件更改为<宽度和<高度。

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

从概念上讲,您需要创建一个比顶点少一个原语。想象的最简单的形式是如果大小== 1.您需要创建2个顶点,但只有1个四边形。

+0

它现在更有意义,但它仍然增加了太多索引。这就像应该做点1到2到3到4的线条,它增加了从4到1的最后一行。我试着降低循环执行的次数,但它似乎没有帮助。没有修改,你的代码看起来像这样:http://imgur.com/N8WIRIN – Axel

+0

对不起,我编辑了答案。你应该只需要将你的循环的条件改为<而不是<=。从概念上说,你需要创建一个比顶点少一个原语。如果你想象你在每对顶点之间创建一个四边形。想象的最简单的形式是如果大小== 1.您需要创建2个顶点,但只有1个四边形。 –

+0

我想到了这样的事情,在做之前我已经尝试过类似于你的编辑的东西。结果是一样的。不过,我相信我不会按照您认为我要添加的顺序添加索引。例如,如果我将我的for循环更改为'y Axel