Libgdx - 自定义创建的3D网格导致java.nio.BufferOverflowException

时间:2016-05-24 23:53:17

标签: java opengl 3d libgdx

我正在使用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);

我不知道导致此异常的原因,任何帮助都表示赞赏。欢迎任何建议。

提前致谢。

0 个答案:

没有答案