我在GLSL着色器中使用mat3制服。
layout (std140)
struct UNI {
mat3 mat;
} u;
在GLSL中,mat3存储为3行vec4,这意味着其中有3个未使用的浮点数。
有什么办法可以进入这些浮标吗?我想把更多的数据放进去。
注:我试着使用u.mat[0][3]
,但编译它时它写的是“数组索引超出界限”。
发布于 2022-09-11 12:39:53
我认为你在这里混合了两件事:
的API
当您使用统一缓冲区对象(UBO)备份mat3
的存储并使用std140
布局时,是的,mat3
的布局与3 vec4
值的方式完全相同。因此,从本质上说,在std140
布局下,mat3x4
(4行/元素各有三列)和mat3
或mat3x3
之间的内存布局没有区别。
但是,当使用mat3
作为GLSL着色器中的API类型时,不能访问每列的第四行。
您可以做的只是使用mat3x4
类型,这将允许您访问第四行。当您需要一个mat3
时,您可以使用mat3(theMat3x4Value)
进行转换。
https://stackoverflow.com/questions/73677225
复制相似问题