c++ - 用于替换顶点属性的 Opengl 着色器存储缓冲区对象

标签 c++ opengl shader vertex-shader vertex-attributes

我基本上得到了和问这里的人相同的问题: 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/

相关文章:

c++ - 你如何在 C++ 中将字节数组转换回 jpeg

c++ - 简单参数转发(我的签名应该是什么?)

c++ - 更改窄字符串编码或缺少 std::filesystem::path::imbue

c++ - OpenGL 从深度缓冲区计算法线和 TBN 矩阵(SSAO 实现)

opengl - 来自柏林噪声的每顶点法线?

opengl - 如何使用GLSL在现代OpenGL中渲染文本

c++ - 如何避免访问被删除的内存块时出错?

opengl - 如何在转换中使用枢轴点

python - 用于 OpenGL 第一人称射击游戏 View 的顶点/片段着色器?

opengl - GLSL:启用/禁用纹理+着色器