|
我继承osgFx写了1个multipass的程序,多纹理混合,
(为了简化描述,假设1个pass里仅仅就1个基本纹理和1个alpha纹理),两个pass
一样基本就是:
pass1 & pass2每个pass挂了一个shader,下面代码只关键部分)
"texel0 = texture2D(tex, texcoord[0]);\n"
"texelm = texture2D(texMask, texcoord[1]);\n"
"texel = mix( gl_FragColor, texel0, texelm.x);\n"
"gl_FragColor = texel; \n"
然后在define_passes()里分别两次addpass(...);
期望的结果,是第2pass后,能将2个基本纹理以设置的alpha混合起来,可是实际
结果是仅仅只能看到1次的结果,我如果关闭其中任何1个pass(少addPass1次),
可以看到每次的结果都是正确的,但只要一起执行就有问题。
我的想法是: gl_FragColor应该代表当前framebuffer的颜色,所以每个pass
我都和上个gl_FragColor去混合(是不是这我理解有误区??)
我反复测试狠多遍,感觉gl_FragColor无论在那个pass里,初始化的值好像都是
vec4(0.0,0.0,0.0,0.0), 请问,我怎么在第2pass里拿第一的结果值呢?还是
我哪地方理解有误?
请指教,谢谢。 |
|