Opengl 三角形网格,一半是错误的

Opengl 三角形网格,一半是错误的,opengl,grid,Opengl,Grid,我正在尝试用OpenGL中的已排序三角形创建三角形网格。我有顶点缓冲区和索引缓冲区。我取得了部分成功,但正如您在屏幕截图上看到的,网格的一半渲染错误。我不明白为什么会这样 我的密码在这里 float[] vertices = new float[2 * rows * columns]; int counter = 0; for(int r = 0; r <rows; r++){ for(int c = 0; c < colu

我正在尝试用OpenGL中的已排序三角形创建三角形网格。我有顶点缓冲区和索引缓冲区。我取得了部分成功,但正如您在屏幕截图上看到的,网格的一半渲染错误。我不明白为什么会这样

我的密码在这里

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;
                    }
                }

            }
        }
float[]顶点=新的float[2*行*列];
int计数器=0;
for(int r=0;r
for(int r=0;r
才是您真正想要的

您正在使用
(r+1)
行,同时从
r=0
循环到
r=(rows-1)
,结果实际上是一个不存在的行,其中填充了零

所以这不是“网格的一半”,它只是三角形的最后一行


顺便说一句,
4*rows*columns
对于在条带之间有2个额外退化三角形的三角形条带索引列表来说太多了;
2*(columns+1)*(rows-1)
应该足够了。

非常感谢,它解决了问题,我真的没有意识到问题只出现在最后一行。我建议您阅读有关原始重新启动索引的内容。