我正在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();
}