6

我想要做的,基本上是有 1 个模型,它被多次渲染,具有不同的平移和旋转。

所以我知道如何使用Array BuffersArray Element BuffersVertex Buffer Objects),我的问题是。现在,当我将模型加载到一个VBO最好的方法中时,如果我想用不同的平移和旋转多次渲染它。

对于如何做到这一点,我有两种理论。(虽然我在问什么是最好的方法)。

  1. 将模型加载到一个模型中VBO,然后glDrawArrays为我要渲染的每个模型继续调用并应用平移和旋转。

  2. 将模型加载到一个中VBO多次。然后,同一个模型会被存储多次,最终会占用大量内存。

额外: 当使用1方式时,可以使用 Quadtrees 和/或 Frustum,这将最大限度地减少需要渲染的模型数量。

如果我想要高 FPS 并且仍然可以节省尽可能多的内存,那么这些方法中的哪一种是最好的,还是有另一种更好的方法?

只是为了澄清我不是在问如何渲染使用VBO's或如何渲染,我问的是当你想多次渲染同一个模型时最好的方法是什么。

测试模型

这只是测试模型的图像。

演示模型

编辑

我目前正在使用 OpenGL 4.2.0 版,并且在 Windows 台式计算机上使用它。

4

1 回答 1

4

为了最大限度地减少绘图调用和统一传输,您可以使用glDrawArrayInstanced()。这样,您可以在单个绘图调用中提交尽可能多的原始对象实例!您可以将每个实例的矩阵打包到 UBO(统一缓冲区对象)和使用gl_InstanceID访问每个实例的顶点着色器中的那些

于 2013-08-26T16:57:37.247 回答