我试图在 glsl 中实现一些东西来进行纹理飞溅,但是 for 循环的行为很奇怪,并且对于完全相同的代码给出了不同的结果。
代码 1:
for(int i = 0; i < 5; ++i) {
if(i == 1) {
float fade = texture2D(alphaTextures[i], texCoord.st).r;
vec4 texCol = texture2D(textures[i], texCoord.ba);
texColor = mix(texColor, texCol, fade);
}
}
代码 2:
for(int i = 0; i < 6; ++i) {
if(i == 1) {
float fade = texture2D(alphaTextures[i], texCoord.st).r;
vec4 texCol = texture2D(textures[i], texCoord.ba);
texColor = mix(texColor, texCol, fade);
}
}
if 语句仅用于测试目的,因此它应该给出相同的结果。唯一的区别是循环条件。我真的不知道为什么只有代码 1 给出了正确的结果。这里有两张图片:
结果应该如图 1 所示。