假设我有一些积分p1
,p2
,p3
和p4
。我需要在几何着色器阶段根据其后继对每个变换应用一些变换,因此我的GS需要访问对(p1, p2)
,(p2, p3)
,(p3, p4)
。我怎样才能做到这一点?如果我使用POINTS原语,我一次只能获得对单个点的访问权。
请注意,这是一个简化,因为在实践中我需要一次有四个点,就像立方体的顶点一样。我曾想过使用类似线条的东西,但它没有提供足够的分数......
编辑: 为了澄清,我实际想要实现的是让CPU发送一个"立方晶格" (?)表示为一组点的GPU。我的GS必须一次取四个这样的点,每个点代表一个立方体的顶点,并根据这些点的属性输出三角形。
答案 0 :(得分:0)
假设您将3D晶格放在缓冲区中。您知道订单(例如按行)。所以你事先知道如何提取每次迭代所需的四个点。对于常规网格,您知道点之间的 stride 。因此,您可以将glVertexAttribPointer()
与正确的步幅参数一起使用。
您还可以使用索引缓冲区和glDrawElements
。
另一种可能较慢的方法是使用绑定在同一VAO中的四个缓冲区并使用不同的属性进行读取。
该命令可以是glDrawArray(GL_POINTS,...)
。或者甚至可以尝试实例化绘图并使用实例ID作为晶格位置的指示。
问题是glDrawXXX
将从绑定的缓冲区读取您指定的次数。每次你都可以阅读你的四点。
无论你使用什么,你都可以在VS中获得4分,你可以传递给GS。