通过 ivec4 索引访问 GLSL vec4 组件
Access GLSL vec4 components by ivec4 indices
在 GLSL 中我可以做到
vec4 data = vec4(1.0, 2.0, 3.0, 4.0);
gl_FragColor = data.xxyy;
但是我可以做些什么吗?
vec4 data = vec4(1.0, 2.0, 3.0, 4.0);
ivec4 indices = ivec4(0, 0, 1, 1);
gl_FragColor = data[indices];
不,你不能。实际上你想要 Swizzle 类似 data.indices
.
的东西
你必须构造一个vec4
:
gl_FragColor =
vec4(data[indices[0]], data[indices[1]], data[indices[2]], data[indices[3]]);
或者你可以使用矩阵乘法:
indices = mat4(vec4(1,1,0,0), vec4(0,0,1,1), vec4(0,0,0,0), vec4(0,0,0,0));
gl_FragColor = indices * data;
在 GLSL 中我可以做到
vec4 data = vec4(1.0, 2.0, 3.0, 4.0);
gl_FragColor = data.xxyy;
但是我可以做些什么吗?
vec4 data = vec4(1.0, 2.0, 3.0, 4.0);
ivec4 indices = ivec4(0, 0, 1, 1);
gl_FragColor = data[indices];
不,你不能。实际上你想要 Swizzle 类似 data.indices
.
你必须构造一个vec4
:
gl_FragColor =
vec4(data[indices[0]], data[indices[1]], data[indices[2]], data[indices[3]]);
或者你可以使用矩阵乘法:
indices = mat4(vec4(1,1,0,0), vec4(0,0,1,1), vec4(0,0,0,0), vec4(0,0,0,0));
gl_FragColor = indices * data;