2016-10-28 2 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 * (columns + 1) * (rows - 1) должно быть достаточно.

+0

Большое спасибо, он решает проблему, я действительно не понял, что проблема только в последней строке. – Pogasta

+0

И, конечно же, спасибо за отзыв о размере массива. – Pogasta

 Смежные вопросы

  • Нет связанных вопросов^_^