2016-10-28 30 views
1

我想在OpenGL中用三角形排序創建三角形網格。我有頂點緩衝區和索引緩衝區。我已經部分成功了,但是在屏幕截圖中可以看到一半網格呈現錯誤。我不知道這是爲什麼。三角形網格,一半是錯誤的

enter image description here

我的代碼是在這裏

float[] vertices = new float[2 * rows * columns]; 

     int counter = 0; 
     for(int r = 0; r <rows; r++){ 
      for(int c = 0; c < columns; c++){ 
       vertices[counter ++] = (float)r/(rows-1); 
       vertices[counter ++] = (float)c/(columns -1);    
      } 
     } 

int[] indices = new int[4 * (rows) * (columns)]; 

     int counter = 0; 
     for(int r = 0; r < rows; r++){ 
      for(int c =0; c <= columns; c++){ 
       if(r % 2 == 0){ 
        if(c == columns){ 
         indices[counter ++] = (c-1) + (r+1)*columns; 
         indices[counter ++] = (c-1) + (r+1)*columns; 
        }else{ 
         indices[counter ++] = c + r * columns; 
         indices[counter ++] = c + (r+1) * columns; 
        } 
       }else{ 
        if(c == columns){ 
         indices[counter ++] = (columns) - c + (r +1) * columns; 
         indices[counter ++] = (columns) - c + (r +1) * columns; 
        }else{ 
         indices[counter ++] = (columns - 1) - c + (r + 1) * columns; 
         indices[counter ++] = r*columns + (columns-1) - c; 
        } 
       } 

      } 
     } 
+0

我建議你閱讀關於原始重啓索引。 – ybungalobill

回答

1

for (int r = 0; r < rows - 1; r++) {是你真正想要的東西。

您在使用(r+1)行時從r = 0循環到r = (rows - 1),實際上結束於不存在的以零填充的行。

所以這不是一個「網格的一半」,它只是最後一排三角形。

並且BTW,4 * rows * columns對於帶之間具有2個附加退化三角形的三角形帶索引列表來說太多了; 2 * (columns + 1) * (rows - 1)就足夠了。

+0

非常感謝,它解決了這個問題,我真的沒有意識到這個問題只在最後一行。 – Pogasta

+0

當然,感謝關於數組大小的提示。 – Pogasta