我正在构思一种很好的方法,在OpenGL中用一次绘图调用来渲染许多不相交的几何体,当每一块都有不同的平移和旋转时,我遇到的墙是最好的方法,因为你没有在单个对象绘制之间更新统一的模型视图的奢侈。我在这里和其他地方读到了一些其他的问题,似乎人们所指的方向是相当不同的。最好列出完成此操作的主要方法,并尝试隔离最常见或推荐的方法。以下是我考虑过的一些想法:
编辑:删除了实例化的提法,因为它在这里并不真正适用
除了这些之外,还有其他常见的方法吗?
作为一个学术问题,我很好奇上述所有方法是否都是可行的和“可接受的”,或者其中一个显然是胜过其他人的?如果我只使用桌面GL,实例化是实现这一目标的主要方式吗?
发布于 2013-04-27 12:10:48
两个考虑因素:
一般来说,如果有多个对象,每个对象都使用独立的变换,则可以使用多个
调用。这就是他们在那里的目的。旧的NVIDIA“批处理批处理”演示文稿引用了每帧10,000到40,000个绘制调用(在D3D中。GL中的更多信息),用于1 1GHz。如今,你看到的远不止这些。所以,除非你在处理成千上万个独立的对象,它们都是不同的(所以没有实例化),否则你很可能会很好。
另一个想法是:
将模型视图矩阵计算完全从着色器中取出,并在相乘后仅传递顶点。这允许对不同方向和平移的多个对象进行单个绘制调用。成本来自所有CPU计算,但我认为如果瓶颈不像多个绘制调用的瓶颈那么大,那么它将是值得的。
(摘自here。)
发布于 2014-05-29 09:53:52
这里有一个替代的想法:
为每个顶点提供一个通过属性传入的对象ID。然后在顶点着色器中,使用此ID在存储变换矩阵的纹理中进行查找。
https://stackoverflow.com/questions/16128808
复制相似问题