我正在开发一个可视化引擎(简单的CAD风格)(使用python和pyopengl绑定),它将同时显示和动画多达10-20个实体。 我正在使用VBO数据对象来存储顶点数据并显示每个主体。我想知道为VBO分配颜色的最佳(最实用,最简单和最便宜的GPU)方法是什么。每个身体都有均匀的颜色,外观可以设置为透明 - 可选。据我所知,这可以通过以下方法完成(我测试了方法1和2):
还有其他方法吗?哪一个最适合这份工作? 我还想问一下,对于一个VBO,每个VBO有多少个顶点,以及有多少个顶点,比如说;小型,中型和大型维也纳国际中心?只是为了让我更多地了解所显示对象的大小。
答案 0 :(得分:1)
着色部分取决于您现在使用的OpenGL版本,将来的版本以及是否需要照明。
如果您使用OpenGL 2.1,可能是因为您喜欢内置矩阵堆栈和gluPerspective,那么glColor4f是为非照明对象设置统一颜色的最简单方法。如果您想使用光照,也可以添加glColorMaterial调用。或者对于照明,你可以使用glMaterial。
正如Andon指出的那样,如果您必须转移到OpenGL 3或4,这些将停止工作。因此,如果将来要更新此程序,或者您计划基于可编程GPU着色器添加额外功能,抓取OpenGL SuperBible第6版的副本并开始编码。最简单的方法是添加另一个具有每顶点颜色的VBO,或者如您已经发现的那样用VBO交错颜色。从理论上讲,这是浪费空间,因为单一颜色会多次重复,但如果你不是每一帧都改变颜色,那么呢? (技嘉显卡很精彩。)
好的,每个VBO建议的顶点数。再说一次,你在乎吗?你说你要渲染10到20个物体。这不是每帧过多的OpenGL调用。也许如果你需要每帧渲染数千个对象,那么值得思考,但我的建议是始终做最先行的最简单的事情,因为这通常足够快。
要从OpenGL获得最大性能,通常需要最小化每帧的调用次数。因此,如果您有太多单独的OpenGL调用,那么数据是一个大的VBO还是许多小的无关紧要。将更多数据填充到大型VBO中(读取原始重启)通常可以减少调用次数,而现代图形卡可以让您存储每VBO兆字节甚至几千兆字节。阅读Moller和Haines的实时渲染,或SuperBible的间接绘图部分,了解更多细节。
希望这有帮助。