【发布时间】:2021-01-05 01:41:52
【问题描述】:
我想避免多次重复以下代码,因为我使用了大量的 VBO:
glBindBuffer(GL_ARRAY_BUFFER, VBOs[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices1), vertices1, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, VBOs[1]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices2), vertices2, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, VBOs[2]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices3), vertices3, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, VBOs[3]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices4), vertices4, GL_STATIC_DRAW);
我试图用一个循环来简化这段代码。这是我尝试做的:
std::string aux = "vertices";
std::string aux2;
int aux3;
std::string aux4;
const void* aux5;
for (int i = 0; i <= 13; i++) {
aux3 = i++;
aux4 = std::to_string(aux3);
aux2 = aux + aux4;
aux5 = aux2.c_str();
glBindBuffer(GL_ARRAY_BUFFER, VBOs[i]);
glBufferData(GL_ARRAY_BUFFER, sizeof(aux2), aux5, GL_STATIC_DRAW);
}
没有成功。它仍然显示了我使用的最后一种颜色的图形,但没有绘制其他图形。有没有办法让这个循环工作,或者我应该继续重复上面的代码?感谢您的帮助。
我还尝试使用循环简化代码中的 VAOs 部分,并且成功了。这是我的做法:
glGenVertexArrays(14, VAOs);
for (int i = 0; i <= 13; i++) {
glBindVertexArray(VAOs[i]);
glBindBuffer(GL_ARRAY_BUFFER, VBOs[i]);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
}
【问题讨论】: