2016-04-25 102 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