我正在使用libgdx在代码中生成一些3d网格物体。现在我正在尝试生成一个平面,中间有许多顶点只是为了测试一下,但是当我调用Exception in thread "LWJGL Application" java.nio.BufferOverflowException
变量mesh.setIndices(indices);
时,我收到了indices
短阵。
如果我的指数少于180-150,我没有遇到任何麻烦。我无法从追踪和错误中找出确切的数字,但我确信如果我的指数超过180,则会抛出异常。
以下是我创建网格的代码:
首先我如何生成我的顶点(我不认为这是问题所在,但我还是把它们放进去了)*注意我的顶点属性是(VertexAttribute.Position(), VertexAttribute.Normal(), VertexAttribute.ColorUnpacked())
private float[] generateVertices(int width, int height) {
int index = 0;
float vertices[] = new float[width*height*10];
for(int i = 0; i < width; i ++) {
for(int j = 0; j < height; j++) {
//vertex coordinates
vertices[index] = i;
vertices[index+1] = 0;
vertices[index+2] = j;
// normal
vertices[index+3] = 0;
vertices[index+4] = 1;
vertices[index+5] = 0;
// random colors!!!
vertices[index+6] = MathUtils.random(0.3f, 0.99f);
vertices[index+7] = MathUtils.random(0.3f, 0.99f);
vertices[index+8] = MathUtils.random(0.3f, 0.99f);
vertices[index+9] = 1;
index+=10;
}
}
return vertices;
}
其次,我是如何生成索引的:
private short[] generateIndices(int width, int height) {
int index = 0;
short indices[] = new short[(width-1)*(height-1)*3 * 2];
for(int i = 0; i < width-1; i ++) {
for (int j = 0; j < height-1; j++) {
indices[index] = (short)((j*height) + i);
indices[index+1] = (short)((j*height) + i+1);
indices[index+2] = (short)(((j+1)*height) + i);
indices[index+3] = (short)(((j+1)*height) + i);
indices[index+4] = (short)((j*height) + i+1);
indices[index+5] = (short)(((j+1)*height) + i + 1);
index+= 6;
}
}
return indices;
}
第三,这就是我设置顶点和索引的方法(注意6和7是平面的宽度和高度):
mesh.setVertices(generateVertices(6, 7));
mesh.setIndices(generateIndices(6, 7));
最后,这是我通过自定义着色器渲染网格的方法。
shaderProgram.setUniformMatrix("u_projectionViewMatrix", camera.combined);
shaderProgram.setUniformMatrix("uMVMatrix", mat4);
// rendering with triangles
mesh.render(shaderProgram, GL20.GL_TRIANGLES);
我不知道导致此异常的原因,任何帮助都表示赞赏。欢迎任何建议。
提前致谢。