我正在努力将应用程序从Windows移植到Linux,我需要了解操作员[]在HLSL中的工作以及如何移植到GLSL。
我有这样的代码:
red = texture.Sample(sampler, uv)[x];
Sample函数应该返回一个像素值,对吧? x是一种偏移量吗?
[]运算符是array member selection operator,也可以用于访问向量。
等效于glsl代码
red = texture.Sample(sampler, uv)[x];
是
float red = texture(sampler, uv)[x];
texture
返回类型为vec4
的值(例如sampler2D
)。向量的组成部分可以由索引运算符访问。由于x
是索引,因此它必须是具有整数数据类型的变量或常量。向量具有4个分量(分别为.x
,.y
,.z
,.w
.r
,.g
,.b
,.a
),因此x
的值必须为0 ,1、2或3。texture(sampler, uv)[0]
与texture(sampler, uv).r
相同。另请参阅GLSL- Swizzling。