【问题标题】:Access GLSL vec4 components by ivec4 indices通过 ivec4 索引访问 GLSL vec4 组件
【发布时间】:2021-12-04 04:16:41
【问题描述】:

在 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];

【问题讨论】:

    标签: glsl fragment-shader


    【解决方案1】:

    不,你不能。实际上你想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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多