我正在尝试创建一个元素/索引数组,该数组是用一定的内存动态构建的。但是,我的代码只有在硬编码这个数组时才有效。特别是,以下是所有相关代码:
GLfloat elements[15 * 15 * 2 * 3 * 2];
GLuint second_elements[] = {
0, 16, 17,
0, 1, 17,
1, 17, 18,
1, 2, 18,
...
};
GLuint VBO;
glGenBuffers(1, &VBO);
GLuint EBO;
glGenBuffers(1, &EBO);
GLuint VAO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), elements, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (void*)0);
glEnableVertexAttribArray(0);
...
glDrawElements(GL_TRIANGLES, sizeof(elements) / sizeof(elements[0]), GL_UNSIGNED_INT, 0);
当我使用elements
时,我的代码不会呈现任何内容。当我使用"second_elements"时,我的代码会完美地呈现所有内容。我已经确认他们持有相同的数据,并试图从每个三角形中渲染一个三角形作为测试,但我似乎无法将EBO正确加载到VAO中。有人能帮忙吗?
事实证明,(出于某种原因(如果我使用std::vector
而不是普通堆内存,我可以通过传递elements.size()
和&elements[0]
来实现这一点。我不知道为什么,但我会尽我所能。