2016-10-28 3 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 = 0からr = (rows - 1)へのループ中に、(r+1)の行が使用されており、存在しない行がゼロで埋められてしまいます。

これは、グリッドの半分ではありません。三角形の最終行です。

そして、BTW、4 * rows * columnsは、ストリップ間に2つの追加の縮退三角形を持つ三角形ストリップインデックスのリストにはあまりにも多くあります。 2 * (columns + 1) * (rows - 1)で十分です。

+0

ありがとう、それは問題を解決する、私は本当にその問題は最後の行にあることを認識していませんでした。 – Pogasta

+0

そして、もちろん、配列のサイズについてのヒントをありがとう。 – Pogasta

関連する問題