【发布时间】:2018-02-23 10:42:24
【问题描述】:
我正在尝试获取 VBO 中的顶点以生成合适的边界框,但从 glMapBuffer 返回的值是随机的。
这是我的代码:
//Data (Quad):
FloatBuffer vertexData = FloatBuffer.wrap(new float[] {
-0.5f, -0.5f, 0.0f,
-0.5f, 0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.5f, 0.5f, 0.0f,
});
存储顶点:
//Generating IDs
int vaoID = glGenVertexArrays();
glBindVertexArray(vaoID);
int vboID = glGenBuffers();
//Storing vertex data in attribute list
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, vertexData , GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
//Unbinding
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
加载顶点:
//Binding VAO and VBO
glBindVertexArray(vaoID);
glBindBuffer(GL_ARRAY_BUFFER, vboID);
ByteBuffer vertexBuffer = glMapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY);
//Printing values
//vertices.flip(); //Do I have to flip it? No, right?
System.out.println("Capacity: " + vertices.capacity() + ", Limit: " + vertices.limit());
//Capacity: 48, Limit: 48, Position: 0
while(vertices.remaining() != 0) {
System.out.print("x: " + vertices.get());
System.out.print(", y: " + vertices.get());
System.out.println(", z: " + vertices.get());
}
//Unbinding
glUnmapBuffer(GL_ARRAY_BUFFER);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
输出是随机值(大多数只是零,但有时是随机的)。 GlGetError() 返回 0(无错误)。
这是生成边界框的合理方法还是只是愚蠢的?为什么值是随机的?
【问题讨论】:
-
我真的认为你需要在 glVertexAttribPointer() 之后调用 glEnableVertexAttribArray()
-
我尝试在建议的位置和许多其他位置调用 glEnableVertexAttribArray(0),但没有帮助。 :(