0

我试图通过将顶点数据(位置和纹理坐标)加载到 VBO 中来绘制很多正方形。我的问题是当我尝试加载所有这些顶点时,由于某种原因它会跳过一些正方形,留下一个空白空间。如果我减少正方形的数量,则不会发生此问题。

以下是我尝试设置 VBO 的方法:

float[] vertexData = new float[<large number>];
//fill vertexData with 5 floats per square
FloatBuffer vertexBuffer = ByteBuffer.allocateDirect(vertexData.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
vertexBufferBackground.put(vertexData).position(0);

int[] buffers = new int[1];
GLES20.glGenBuffers(1, buffers, 0);

GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, buffers[0]);
GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, vertexBuffer.capacity() * 4, vertexBuffer, GLES20.GL_STATIC_DRAW);
bufferIDBackground = buffers[0];

这是它的渲染方式:

GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, bufferID);
GLES20.glEnableVertexAttribArray(mPositionHandle);
GLES20.glVertexAttribPointer(mPositionHandle, 3, GLES20.GL_FLOAT, false, 20, 0);

GLES20.glEnableVertexAttribArray(mTexCoordLoc);
GLES20.glVertexAttribPointer(mTexCoordLoc, 2, GLES20.GL_FLOAT, false, 20, 12);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);

为简单起见,省略了很多代码,我只展示我认为相关的内容。如果还不够,请告诉我。

编辑:这是我的问题的图像: 在此处输入图像描述

更新:我已将缓冲区分成更小的块并单独渲染它们。以下是结果(使用 MS Paint 编辑):
2x2 块: 在此处输入图像描述

4x4 块 : 4x4在此处输入图像描述

的左下角图块假定为空。假设相邻的块被完全填充。看起来一个缓冲区可以容纳/渲染的顶点数量有一些限制,2x2 为 3,4x4 为 9。(忽略绿色的东西,在不同的缓冲区中)。
1x1 块(每个图块都在它们自己的缓冲区中)渲染一切都很好,但性能会受到很大影响。

4

0 回答 0