我正在尝试做的事情,基本上有一个模型可以多次渲染,具有不同的平移和旋转。
所以我知道如何使用Array Buffers
和Array Element Buffers
(Vertex Buffer Objects
),我的问题是。现在,当我将模型加载到VBO
时,如果我想用不同的平移和旋转多次渲染它,这将是最好的方法。
我有2个理论可以做到这一点。 (虽然我问的是什么是最好的方法)。
将模型加载到一个VBO
中,然后继续调用glDrawArrays
并为我想要渲染的每个模型应用平移和旋转。
将模型多次加载到VBO
个VBO's
。然后,相同的模型会多次存储,最终会占用大量内存。
额外 在执行 1 方式时,可以使用Quadtrees和/或Frustum,这样可以最大限度地减少渲染所需的模型数量。
如果我想要高FPS并且仍然可以节省尽可能多的内存,或者还有其他更好的方法,那么这些方法中的哪一种最好呢?
只是为了澄清我不是在问如何使用{{1}}渲染或者如何渲染一般,我想问一下当你想多次渲染相同模型时最好的方法是什么。
这只是测试模型的图像。
我目前正在使用OpenGL版本4.2.0,而我正在Windows桌面计算机上使用它。
答案 0 :(得分:3)
为了最大程度地减少绘制调用和制服转移,您可以使用glDrawArrayInstanced()。这样,您可以在一次绘制调用中提交原始对象的任意数量的实例!每个实例的矩阵可以打包到UBO中(统一缓冲区对象)并使用gl_InstanceID
访问每个实例的顶点着色器中的那些