mix()
实际上只是一个方便的函数,您可以轻松地自己编写。定义是:
mix(v1, v2, a) = v1 * (1 - a) + v2 * a
或者换句话说,它计算的加权平均值v1
and v2
,有两个权重w1
and w2
满足约束条件的 0.0 到 1.0 之间的浮点值w1 + w2 = 1.0
:
v1 * w1 + v2 * w2
您可以直接对此进行概括以计算 2 个以上输入的加权平均值。例如,对于 3 个输入v1
, v2
and v3
,您将使用 3 个权重w1
, w2
and v3
满足约束条件w1 + w2 + w3 = 1.0
,并计算加权平均值:
v1 * w1 + v2 * w2 + v3 * w3
对于您的示例,确定要为 3 个纹理中的每一个使用的权重,然后使用如下内容:
weightIce = ...;
weightStone = ...;
weightGrass = 1.0 - weightIce - weightStone;
color = texture2D(ice_layer_tex, texcoord) * weightIce +
texture2D(stone_layer_tex, texcoord) * weightStone +
texture2D(grass_layer_tex, texcoord) * weightGrass;