我同时使用 VAO 和 Mapped VBO 以获得尽可能多的性能。现在,我的 VBO 以这种形式 VCVCVCVCVCVC 交错,因此有 3 个浮点数的顶点,然后是 4 个浮点数的颜色。
我的问题是,即使我有正确的步幅和偏移,它也无法识别颜色。当我实现 VAO 时,这个问题就开始发生了。
导入部分代码:映射 VBO 并创建 VAO
绑定一切:
glBindVertexArray(vaoHandel);
glBindBuffer(GL_ARRAY_BUFFER, vboHandel);
glBufferData(GL_ARRAY_BUFFER, NumberOfIndecies << 2, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 7<<2, 0<<2);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 4, GL_FLOAT, false, 7<<2, 3<<2);
glEnableVertexAttribArray(1);
映射部分:
ByteBuffer dataBuffer = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY, NumberofIndecies << 2, null);
FloatBuffer vboData = dataBuffer.order(ByteOrder.nativeOrder()).asFloatBuffer();
建立 VBO:
build(vboData);
vboData.flip();
取消映射:
glUnmapBuffer(GL_ARRAY_BUFFER);
解绑:
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
那就是构建和映射 VBO 和 VAO。渲染:
glBindVertexArray(vaoHandel);
glDrawArrays(GL_QUADS, 0, capacity);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glBindVertexArray(0);
所以再次回顾一下我的问题是颜色不起作用,它们没有出现。我正在绘制的QUADS出现了,但它们是白色的。在检查了我放入的颜色后,显然是RED。