我正在为骨骼动画编写一个着色器,它需要一个 int[] 属性来保存一个 mat4[] 的索引,该 mat4[] 包含关节的变换矩阵。我的问题是我无法创建存储 int[] 的 VBO。我试过使用 GL30.glVertexAttribIPointer() 但是,我的电脑不支持 Opengl 3.0。所以我不得不使用我读过的 glVertexAttribPointer() 将所有值转换为浮点数。将 int[] 存储在着色器可以访问的 VBO 中的最佳方法是什么。
问问题
383 次
1 回答
1
您正在尝试做的事情有两个问题。
第一个问题是你试图传递整数。使用花车;使用浮点数作为数组的索引没有任何问题。如果您传递GL_FALSE
的normalized
参数glVertexAttribPointer
,您将得到有效的整数。您可以将每个索引作为GL_UNSIGNED_BYTE
.
第二个问题是你试图传递一个数组。别那样做; 你想要一个vec4
,而不是一个数组。XYZW 代表您与矩阵一起使用的四个索引。
如果一个顶点需要超过 4 个矩阵怎么办?也停止这样做;其他人都是这样剥皮的。其工作方式是,当您构建顶点数据时,如果一个顶点受超过 4 个矩阵的影响,则您只选择权重最大的 4 个(相应地重新调整权重)。
于 2013-01-24T07:07:06.770 回答