【发布时间】:2021-01-28 00:50:47
【问题描述】:
我正在阅读this answer on SO,其中有人正在提取 mat4 属性。
在设置顶点属性数组时,我注意到一件事:
gl.vertexAttribPointer(row3Location, floatsPerRow, gl.FLOAT,
false, bytesPerMatrix, row3Offset);
我知道提供的 mat4 占用 4 个属性槽,但为什么我们将 bytesPerMatrix 作为步幅传递而不是 bytesPerRow 之类的?每个属性槽不应该从其偏移量中提取 16 个字节而不是 64 个字节吗?
这就是我想象的 16 个字节的步幅和偏移量是 16 的倍数的方式。
0000111122223333444455556666777788889999AAAABBBBCCCCDDDDEEEEFFFF
^---------------
^---------------
^---------------
^---------------
这就是我想象 64 字节的步幅和偏移量是 16 的倍数的方式。
0000111122223333444455556666777788889999AAAABBBBCCCCDDDDEEEEFFFF
^---------------------------------------------------------------
^---------------------------------------------------------------
^---------------------------------------------------------------
^---------------------------------------------------------------
^ considerable overlap when pulling attributes for matrix
所以,显然我的跨步和偏移的心理模型是错误的。这实际上是如何工作的?当这个属性一次只拉取一个 vec4 的等价物时,为什么步幅需要是整个矩阵的大小?
【问题讨论】:
标签: attributes webgl2