我基本上得到了和问这里的人相同的问题: Dynamically sized arrays in OpenGL ES vertex shader; used for blend shapes/morph targets . 尤其是他最后一个未回答的问题也让我很困扰。
所以我还想为我正在处理的每个网格使用任意数量的混合形状。目前我使用固定数字并将形状视为顶点属性。这里的优点是我总是有可用的当前顶点的相关数据。现在,如果我想使用任意数量的形状,我想我会使用 SSBO,因为它们的线索正是我想要的:动态大小的数据。 然而,据我所知,SSBO 是静态的,对于着色器中的每个处理过的顶点,我都有整个网格可用的混合形状数据。这意味着我将不得不引入某种计数器并尝试从我的 SSBO 中为每个顶点选择正确的数据片段。
这个理解对吗? 我真的不确定这是否是最佳解决方案,也许你可以给我一些提示。
最佳答案
是的,你的理解是正确的。
您可以使用 gl_VertexID
或只传递一些“顶点编号”作为属性,以了解要为您正在处理的特定顶点在 SSBO
中加载哪些数据。
关于c++ - 用于替换顶点属性的 Opengl 着色器存储缓冲区对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37784559/