首先:我已经将其发布在stackoverflow社区上。我是新手,对这里的这个社区一无所知。我很抱歉。

我基本上和在这里问那个人的问题相同:https://stackoverflow.com/questions/36457138/dynamically-sized-arrays-in-opengl-es-vertex-
特别是他最后一个未解决的问题也困扰着我。

所以我也想为每个网格使用任意数量的混合形状处理。目前,我使用固定的数字并将形状视为顶点属性。这样做的好处是,我始终可以获得当前顶点的相关数据。现在,如果我想使用任意数量的形状,我认为我会使用SSBO,因为它们的线索正是我想要的:动态大小的数据。但是,据我所知,SSBO是静态的,对于着色器中的每个处理顶点,我都有整个网格可用的blendshape数据。这意味着我将不得不引入某种计数器,并尝试为每个顶点从我的SSBO中选择正确的数据。

这种理解正确吗?我真的不确定这是否是最佳解决方案,也许您可​​以给我一些提示。

感谢您的回答!

#1 楼

所需的计数器在着色器中内置为gl_VertexID

但是,您有16个属性,每个属性包含4个组件。取2个分量作为纹理坐标,您可以使用62个浮点值。如果每个混合形状需要6个组件(3个位置+ 3个标准),则每帧每个对象可以使用10个混合形状。如果不将法线作为静态,则最多可以得到19个形状。

要在10个以上形状之间进行混合的时间非常少。即使这样,您也可以避免制作其他形状以获得所需的结果形状。

评论


$ \ begingroup $
好,谢谢您对gl_vertextID的提示。那就是我想要的。关于混合形状的数量:我正在编写用于面部动画研究的渲染器,在这种情况下,至少应该存在使用10种以上形状的可能性。我刚刚偶然发现的另一种可能性是使用变换反馈来迭代处理形状块。你对此有看法吗?再次谢谢你!
$ \ endgroup $
–try_some_ubik
16 Jun 13'9:52



#2 楼

gl_VertexID是一种解决方法,如果需要正常的映射骨骼角色,您会很快用尽attrib,只有2-3种混合形状可容纳16个attrib的空间

评论


$ \ begingroup $
我真的看不到这个老问题的答案,因为它没有提供现有答案尚未提供的任何相关新信息。
$ \ endgroup $
–wychmaster♦
20/12/11在13:27