多次渲染相同的模型

时间:2013-08-26 09:12:56

标签: performance opengl 3d rendering

我正在尝试做的事情,基本上有一个模型可以多次渲染,具有不同的平移和旋转。

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

我有2个理论可以做到这一点。 (虽然我问的是什么是最好的方法)。

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

  2. 将模型多次加载到VBOVBO's。然后,相同的模型会多次存储,最终会占用大量内存。

  3. 额外 在执行 1 方式时,可以使用Quadtrees和/或Frustum,这样可以最大限度地减少渲染所需的模型数量。

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

    只是为了澄清我不是在问如何使用{{1}}渲染或者如何渲染一般,我想问一下当你想多次渲染相同模型时最好的方法是什么。

    测试模型

    这只是测试模型的图像。

    Demo Model

    修改

    我目前正在使用OpenGL版本4.2.0,而我正在Windows桌面计算机上使用它。

1 个答案:

答案 0 :(得分:3)

为了最大程度地减少绘制调用和制服转移,您可以使用glDrawArrayInstanced()。这样,您可以在一次绘制调用中提交原始对象的任意数量的实例!每个实例的矩阵可以打包到UBO中(统一缓冲区对象)并使用gl_InstanceID

访问每个实例的顶点着色器中的那些
相关问题