通过调用glDrawElements()绘制很多三角形会变慢吗?

时间:2018-11-28 10:58:29

标签: c++ opengl glm-math

RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 10.200.66.174
RemoteIPInternalProxy 192.168.3.1

这是我的代码的一部分。

我想绘制100000000个三角形,但是它变得非常慢。 我知道是因为我打过for (int i = 0; i < 100000000; ++i) { model = glm::translate(glm::mat4(1.0), glm::vec3(i * 2, i * 2 , i * 2)); glUniformMatrix4fv(modellocation, 1, GL_FALSE, &model[0][0]); glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, (void *)0); } 了很多次。而且我也知道我需要一次绘制更多的三角形,以避免调用glDrawElements太多的时间。

但是我不知道该怎么做,我是否需要更改已绑定的缓冲区,还是可以使用其他方法来做到这一点?

这是我的缓冲区

glDrawElements

还有我的索引缓冲区

float vertex[] = {
    0.0f, 0.5f, 0.0f,
    -0.5f, 0.0f, 0.0f,
    0.5f, 0.0f, 0.0f,
};

我这样绑定缓冲区

unsigned int indices[] = {     0, 1, 2    };

1 个答案:

答案 0 :(得分:0)

您可以在一个顶点缓冲区中放置多个三角形,然后一次全部“绘制”。这是一个由许多三角形组成的球体的示例:https://github.com/aromanro/SolarSystem/blob/master/SolarSystem/Sphere.cpp您可以从GitHub上获取我的项目并查看它,这可能会有所帮助。

还有另一种方法可以大大加快实例化速度。它不在SolarSystem项目中使用,但在事件驱动分子动力学项目中使用。