我有两个缓冲区:
(1)顶点-保留交错的位置、颜色等。其中许多构成单个网格。
(2)变换-保存4x 4变换矩阵。其中一个对应于单个网格。
由于每个变换有许多顶点,我如何绘制顶点,使得变换缓冲区仅在x个顶点被处理后前进?
我使用glDrawArrays()
一次来绘制所有内容,因为每个网格只应该绘制一次,并且它们都使用相同的着色器。现在,我认为顶点着色器为每个顶点拉下一个mat 4变换,这太频繁了。它不应该对每个顶点进行拉取,而应该只对由x个顶点组成的每个网格进行拉取。
编辑
我使用glMultiDrawArraysIndirect()
作为我的解决方案。Reddit上的以下指南描述了我的确切问题以及如何解决它:
https://www.reddit.com/r/opengl/comments/3m9u36/how_to_render_using_glmultidrawarraysindirect/
1条答案
按热度按时间y53ybaqx1#
你可以将每个顶点的变换索引(类似于位置、颜色等信息)传递给顶点着色器。然后,可以在顶点着色器中使用该索引来访问数组中的正确变换。
我不认为这可以通过步幅和大小的组合来完成,因为你必须通过加载相同的变换来消耗x个顶点。如果你想改变你绘制形状的方式,你可以为每个形状发出不同的绘制调用,并使用统一的转换。