【问题标题】:glMapBuffer returns random valuesglMapBuffer 返回随机值
【发布时间】: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),但没有帮助。 :(

标签: java opengl lwjgl vbo vao


【解决方案1】:

除非这是在你没有显示的东西中:glMapBuffer 返回一个ByteBuffer,所以你不是一次得到组成每个浮点数的 4 个字节吗?所以要么尝试使用vertices.asFloatBuffer 将其转换为FloatBuffer,或者使用getFloat() 而不是get()

【讨论】:

  • 我知道,但这不是我的问题。如果我这样做,每次运行程序时这些值仍然是随机的。
猜你喜欢
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多