我正在尝试制作一个类似于minecraft的opengl体素引擎。
我创建了一个块类,我想把整个块的所有顶点放在一个VBO中。我以前只把每个块放入vbo,并调用渲染每个块。
当我将所有顶点放入一个vbo中时,我对如何转换块中每个块的坐标感到有点困惑。
这是我目前所拥有的:
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.glColorPointer(3, GL11.GL_FLOAT, 0, 0L);
GL11.glDrawArrays(GL11.GL_QUADS, 0, 24);
GL11.glPopMatrix();
}
public void putVertices(float tx, float ty, float tz) {
float l_length = 1.0f;
float l_height = 1.0f;
float l_width = 1.0f;
vertexPositionData.put(new float[]{
xOffset + l_length + tx, l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, l_height + ty, zOffset + l_width + tz,
xOffset + l_length + tx, l_height + ty, zOffset + l_width + tz,
xOffset + l_length + tx, -l_height + ty, zOffset + l_width + tz,
xOffset + -l_length + tx, -l_height + ty, zOffset + l_width + tz,
xOffset + -l_length + tx, -l_height + ty, zOffset + -l_width + tz,
xOffset + l_length + tx, -l_height + ty, zOffset + -l_width + tz,
xOffset + l_length + tx, l_height + ty, zOffset + l_width + tz,
xOffset + -l_length + tx, l_height + ty,zOffset + l_width + tz,
xOffset + -l_length + tx, -l_height + ty,zOffset + l_width + tz,
xOffset + l_length + tx, -l_height + ty, zOffset + l_width + tz,
xOffset + l_length + tx, -l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, -l_height + ty,zOffset + -l_width + tz,
xOffset + -l_length + tx, l_height + ty, zOffset + -l_width + tz,
xOffset + l_length + tx, l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, l_height + ty, zOffset + l_width + tz,
xOffset + -l_length + tx, l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, -l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, -l_height + ty,zOffset + l_width + tz,
xOffset + l_length + tx, l_height + ty,zOffset + -l_width + tz,
xOffset + l_length + tx, l_height + ty, zOffset + l_width + tz,
xOffset + l_length + tx, -l_height + ty, zOffset + l_width + tz,
xOffset + l_length + tx, -l_height + ty, zOffset + -l_width + tz
});
}
public void createChunk() {
vertexPositionData = BufferUtils.createFloatBuffer((24*3)*activateBlocks);
Random random = new Random();
for (int x = 0; x < CHUNK_SIZE; x++) {
for (int y = 0; y < CHUNK_SIZE; y++) {
for (int z = 0; z < CHUNK_SIZE; z++) {
if(blocks[x][y][z].getActive()) {
putVertices(x, y, z);
}
}
}
}
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);
float[] cubeColorArray = new float[(24*3)*activateBlocks];
for(int i=0; i<(24*3)*activateBlocks; i++) {
cubeColorArray[i] = random.nextFloat();
}
FloatBuffer vertexTextureData = BufferUtils.createFloatBuffer((24*3)*activateBlocks);
vertexTextureData.put(cubeColorArray);
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);
glEnd();
}
有什么简单的方法可以将每个块的顶点转换到正确的位置?我以前在每次调用渲染块时都使用glTranslatef,但现在不行了。我现在所做的也不起作用,所有的块都以堆叠的形式呈现在彼此的顶部,看起来如下所示:
编辑:我的vbo似乎只渲染一个块,而不是整个块。我不明白为什么会这样。
我已经解决了这个问题。问题出在我的方法上。
GL11.glDrawArrays(GL11.GL_QUADS, 0, 24);
被改为:
GL11.glDrawArrays(GL11.GL_QUADS, 0, 24*activateBlocks);
我的渲染方法目前看起来像这样: 我最近刚刚尝试使用VBO,在我直接发送顶点数据之前,一切工作正常,纹理映射正确。现在我用VBO改变了顶点数组,即使它有效,也没有应用纹理,我只能看到黑色的物体。 我的纹理可能有什么问题 为什么当我更改GLVertexAttribute指针(顶点,3,GL_FLOAT,GL_ FALSE,0,0)时;带glBindBuffer的行顺序(GL_ARRAY_BUFFER,
我正在开发一个体素引擎,我正在使用VBO。我的问题是我不知道如何生成顶点。 我需要为一个块生成顶点,所以从X,Y,Z坐标创建一个立方体块(带有一个VBO)。 我该怎么做?
我正在制作一个小的2D引擎/游戏来学习OpenGL(使用OpenGL330内核),我正在尝试抽象掉大多数OpenGL函数调用。 现在,我正试图找出如何最好地处理文本渲染。我有一个字体图集工作,但我不知道如何处理文本的顶点。现在,我有一个类,它有一个
目前,我有一个类的集合,其中包含一个纹理、一个VAO和一个VBO。由于所有的状态切换和使用少量三角形调用,绘制数千个这样的对象会导致性能下降。 因此,现在我将更改我的实现,以便创建一系列1MIB VBO(从一个开始,一旦它满了,创建第二个1MIB VBO并继续填充它)。每个VBO需要单独的VAO吗?VBO已经使用了交错的顶点数据,所以我不是在谈论使用多个VBO来处理顶点、法线、纹理库等。
目前,我有一个OBJ加载程序,可以加载必要的OBJ,解析材质,并在必要时绑定纹理。 但是,我需要澄清,当顶点指针在刚刚绑定的VBO中移动时,是否可以绑定多个纹理。我的意思是:我想在一个VBO中跨不同网格放置多个材质。研究告诉我需要使用着色器,但没有指定如何在VBO中间加载它们。 我试图尽量减少绘制调用和VBOs的数量,同时(希望)尽可能远离多纹理。任何帮助都非常感谢! 当前绘图代码:
问题内容: 我正在寻求了解VBO的帮助。我已经做了大量研究,并找到了关于该主题的教程,但是它们对我来说仍然很模糊。我有几个问题: 一个VBO应该在哪里创建,我应该如何创建一个? 我目前正在使用下面的代码初始化我的顶点和索引缓冲区: 如果我是正确的话,这不是在创建VBO。因此,如果我想制作一个VBO,创建VBO的代码会紧接在上面列出的代码之后吗?如果是这样,它将如何创建? 另外,如何将VBO渲染并绘