You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GLSL中能否通过ivec4索引访问vec4向量的对应分量?

GLSL原生不支持你示例中data[indices]这种传入ivec4批量索引vec4分量的写法。

原因说明

GLSL中向量的[]运算符仅支持接收单个整数标量作为参数,单次调用只能取出对应位置的单个分量,例如data[0]可以取出vec4的第一个分量,没有内置语法支持一次性传入整数向量批量读取多个分量。你提到的.xxyy这类分量重排语法属于编译期静态语法,重排规则在代码写死编译时就已经确定,不支持运行期动态传入索引修改重排规则。

替代实现方案

如果需要实现运行期动态批量索引分量的效果,可以自行封装工具函数实现,示例如下:

// 动态重排vec4的工具函数
vec4 dynamic_swizzle(vec4 input_vec, ivec4 indices) {
    // 注意请保证indices各分量取值范围为0~3,越界会导致未定义行为
    return vec4(
        input_vec[indices.x],
        input_vec[indices.y],
        input_vec[indices.z],
        input_vec[indices.w]
    );
}

你的需求可以调整为如下写法实现相同效果:

vec4 data = vec4(1.0, 2.0, 3.0, 4.0);
ivec4 indices = ivec4(0, 0, 1, 1);
gl_FragColor = dynamic_swizzle(data, indices);

内容的提问来源于stack exchange,提问作者Alexey S. Larionov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:54:05