2016-10-28 4 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) 개의 행을 사용하고 있으며, 0으로 채워진 존재하지 않는 행으로 끝납니다.

그래서 이것은 "격자의 절반"이 아니며 단지 삼각형의 마지막 행입니다.

그리고 BTW, 4 * rows * columns은 스트립 사이에 2 개의 축퇴 삼각형이있는 삼각형 스트립 색인의 목록에는 너무 많습니다. 2 * (columns + 1) * (rows - 1)이면 충분합니다.

+0

대단히 고맙습니다. 문제를 해결합니다. 문제는 마지막 행에 있다는 것을 깨닫지 못했습니다. – Pogasta

+0

물론 배열 크기에 대한 팁을 주셔서 감사합니다. – Pogasta