Java VBO-立方体偏移
我有一些代码应该创建一个新的VBO,并用我使用偏移量而不是Java VBO-立方体偏移,java,opengl,lwjgl,vbo,cube,Java,Opengl,Lwjgl,Vbo,Cube,我有一些代码应该创建一个新的VBO,并用我使用偏移量而不是glTranslate创建的立方体填充它。我有一个cubeVBO类,它创建了一个带有偏移量的新多维数据集,但由于某些原因,代码只被调用一次。另外,似乎剔除工作不正常,因为当我正好在立方体前面时,立方体的面消失了。下面是课程: public class CubeVBO { public int vboVHandle; int offset = Block.size; int count = 0; public FloatBuffer ve
glTranslate
创建的立方体填充它。我有一个cubeVBO类,它创建了一个带有偏移量的新多维数据集,但由于某些原因,代码只被调用一次。另外,似乎剔除工作不正常,因为当我正好在立方体前面时,立方体的面消失了。下面是课程:
public class CubeVBO {
public int vboVHandle;
int offset = Block.size;
int count = 0;
public FloatBuffer vertices;
public CubeVBO(float x, float z, float y){
vertices = BufferUtils.createFloatBuffer(3 * 4 * 6);
vertices.put(new float[] {
x + offset, y + offset, z,
x - offset, y + offset, z,
x - offset, y + offset, z - Block.size,
x + offset, y + offset, z - Block.size,
x + offset, y - offset, z - Block.size,
x - offset, y - offset, z - Block.size,
x - offset, y - offset, z,
x + offset, y - offset, z,
x + offset, y + offset, z - Block.size,
x - offset, y + offset, z - Block.size,
x - offset, y - offset, z - Block.size,
x + offset, y - offset, z - Block.size,
x + offset, y - offset, z,
x - offset, y - offset, z,
x - offset, y + offset, z,
x + offset, y + offset, z,
x - offset, y + offset, z - Block.size,
x - offset, y + offset, z,
x - offset, y - offset, z,
x - offset, y - offset, z - Block.size,
x + offset, y + offset, z,
x + offset, y + offset, z - Block.size,
x + offset, y - offset,
z - Block.size, x + offset, y - offset, z });
vertices.flip();
vboVHandle = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboVHandle);
glBufferData(GL_ARRAY_BUFFER, vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
}
我在这节课上用它:
public class BaseChunk {
// x - left/right y - up/down y - forward/backward
VBO vbo;
CubeVBO vertexVBO;
public static final int CHUNK_X = 16;
public static final int CHUNK_Y = 16;
public static final int CHUNK_Z = 16;
public boolean rebuild = false;
FloatBuffer blockPositionData;
FloatBuffer vertexColorData;
private Block[][][] blocks;
private int vboBlockData;
public BaseChunk() {
blocks = new Block[CHUNK_X][CHUNK_Z][CHUNK_Y];
blockPositionData = BufferUtils.createFloatBuffer((CHUNK_X * CHUNK_Z * CHUNK_Y) * 6 * 12);
for (int xx = 0; xx < CHUNK_X; xx++) {
for (int zz = 0; zz < CHUNK_Z; zz++) {
for (int yy = 0; yy < CHUNK_Y; yy++) {
blocks[xx][zz][yy] = Block.Grass;
}
}
}
}
public void rebuildChunk(int id) {
if (rebuild) {
}
}
public void makeChunk(){
for(int x = 0; x <= 16; x++){
for(int z = 0; z <= 16; z++){
for(int y = 0; y <= 16; y++){
vertexVBO = new CubeVBO((float) 16 + x, (float) 16 + z, (float) 16 + y);
}
}
}
vboBlockData = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboBlockData);
glBufferData(GL_ARRAY_BUFFER, blockPositionData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
public void render() {
vbo = new VBO();
glBindBuffer(GL_ARRAY_BUFFER, vertexVBO.vboVHandle);
glVertexPointer(3, GL_FLOAT, 0, 0L);
glBindBuffer(GL_ARRAY_BUFFER, vbo.vboCHandle);
glColorPointer(3, GL_FLOAT, 0, 0);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glPushMatrix();
//glTranslatef(0, 0, 0);
glDrawArrays(GL_QUADS, 0, 24);
glPopMatrix();
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
}
公共类基块{
//x-左/右y-上/下y-前/后
VBO VBO;
CubeVBO vertexVBO;
公共静态最终整数块X=16;
公共静态最终整数块_Y=16;
公共静态最终整数块_Z=16;
公共布尔重建=false;
浮动缓冲区数据;
浮动缓冲区顶点颜色数据;
专用块[][][]块;
私有int-vboBlockData;
公共基块(){
块=新块[CHUNK_X][CHUNK_Z][CHUNK_Y];
blockPositionData=BufferUtils.createFloatBuffer((CHUNK×CHUNK×CHUNK×CHUNK×CHUNK×CHUNK×Y)*6*12);
对于(int xx=0;xx 对于(int x=0;x我认为您的问题之一是,在makeChunk()中,您创建了许多CubeVBO,但您将它们都赋给同一个变量,因此当方法结束时,只有最后创建的一个被vertexVBO引用。在render()中,您绑定并绘制了最终的CubeVBO
您需要创建一个包含所有立方体顶点的大型VBO,并进行绑定和绘制。别忘了更新glDrawArrays的计数参数。您能发布一个屏幕截图吗?