【发布时间】:2013-08-26 09:12:56
【问题描述】:
我想要做的,基本上是让 1 个模型被多次渲染,具有不同的平移和旋转。
所以我知道如何使用Array Buffers 和Array Element Buffers (Vertex Buffer Objects),我的问题是。现在,当我将模型加载到 VBO 时,如果我想用不同的平移和旋转多次渲染它,最好的方法是什么。
对于如何做到这一点,我有 2 种理论。 (虽然我在问什么是最好的方法)。
将模型加载到一个
VBO中,然后继续调用glDrawArrays并为我要渲染的每个模型应用平移和旋转。将模型多次加载到一个
VBO。然后,同一个模型会被存储多次,最终会占用大量内存。
额外: 当使用 1 方式时,可以使用四叉树和/或 Frustum,这将最大限度地减少需要渲染的模型数量。 em>
如果我想要高 FPS 并且仍然尽可能节省最多的内存量,那么这些方法中的哪一种是最好的,还是有另一种更好的方法?
只是为了澄清我不是在问如何使用 VBO's 进行渲染或一般如何渲染,我是在问当你想多次渲染同一个模型时,最好的方法是什么。 em>
测试模型
这只是测试模型的图像。
编辑
我目前使用的是 OpenGL 版本 4.2.0,并且我在 Windows 桌面计算机上使用它。
【问题讨论】:
-
哦,抱歉,我编辑了标签,我的意思是桌面版 OpenGL。
-
实际上,如果你想以最有效的方式做到这一点,你会使用实例化。请参阅:opengl.org/wiki/Vertex_Rendering#Instancing,其想法是使用
Uniform Buffer Objects存储变换信息数组,您可以使用实例 ID 在顶点着色器中对其进行索引。 -
抱歉简洁,明天有时间我会尝试写一个正式的解释。不过我现在要说这个——你的最终解决方案将取决于你的目标 OpenGL 版本,而你没有在你的问题中列出它;否则很好的问题! >> 实例化在 3.1(dx10 类硬件)中成为 OpenGL 的核心功能。
-
哦,我不知道实例化是一回事。尽管您无法在所有实例上执行四叉树和/或截锥体剔除。
-
对矩阵使用具有统一缓冲区的实例化渲染。
标签: performance opengl 3d rendering