在OpenGL和LWJGL中纹理VBO - 在启动时崩溃

时间:2014-06-14 13:20:11

标签: java opengl textures lwjgl vbo

我正在LWJGL中编写体素引擎,并尝试将单个纹理应用于整个16x16块的立方体。每个立方体面应该应用一个简单的32x32污垢纹理。我不能为我的生活弄清楚我可能做错了什么。它在以前为每个立方体面应用颜色时都有效。

程序在启动时崩溃而没有给出任何错误提示。如果我修改程序再次使用颜色,它加载就好了。

public void createChunk() {
    FloatBuffer vertexPositionData = BufferUtils.createFloatBuffer(((12*6)*activateBlocks));
    FloatBuffer vertexTextureData = BufferUtils.createFloatBuffer(((8*6)*activateBlocks));
    Random random = new Random();

    dirtTexture.bind();

    for (int x = 0; x < Constants.CHUNK_SIZE; x++) {
        for (int z = 0; z < Constants.CHUNK_SIZE; z++) {
            for (int y = 0; y < Constants.CHUNK_SIZE; y++) {

                if(occlusionCulling(x, y, z)) {
                    continue;
                }

                if(blocks[x][y][z].getActive()) {
                    putVertices((x*2)*Constants.BLOCK_SIZE, (-y*2)*Constants.BLOCK_SIZE, (z*2)*Constants.BLOCK_SIZE, vertexPositionData);

                    vertexTextureData.put(new float[]{
                            0.0f, 0.0f,
                            1.0f, 0.0f,
                            1.0f, 1.0f,
                            0.0f, 1.0f,

                            0.0f, 0.0f,
                            1.0f, 0.0f,
                            1.0f, 1.0f,
                            0.0f, 1.0f,

                            0.0f, 0.0f,
                            1.0f, 0.0f,
                            1.0f, 1.0f,
                            0.0f, 1.0f,

                            0.0f, 0.0f,
                            1.0f, 0.0f,
                            1.0f, 1.0f,
                            0.0f, 1.0f,

                            0.0f, 0.0f,
                            1.0f, 0.0f,
                            1.0f, 1.0f,
                            0.0f, 1.0f,

                            0.0f, 0.0f,
                            1.0f, 0.0f,
                            1.0f, 1.0f,
                            0.0f, 1.0f,
                    });

                }
            }
        }
    }

    vertexPositionData.flip();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBOVertexHandle);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertexPositionData, GL15.GL_STATIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

    vertexTextureData.flip();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBOTextureHandle);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertexTextureData, GL15.GL_STATIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
}

public void drawChunk() {
    GL11.glPushMatrix();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBOVertexHandle);
    GL11.glVertexPointer(3, GL11.GL_FLOAT, 0, 0L);

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBOTextureHandle);
    GL11.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0L);
    GL11.glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    GL11.glDrawArrays(GL11.GL_QUADS, 0, ((24)*activateBlocks));

    GL11.glPopMatrix();

}

0 个答案:

没有答案
相关问题