我正在尝试通过在单独的通道中计算位置来制作FBO粒子系统。
现在使用这篇文章中的代码http://barradeau.com/blog/?p=621。我渲染了一个没有任何移动的粒子球:
我希望看到的是:(通过在渲染着色器中设置相同的纹理实现)
我也试着用简化的贴图和相同的想法制作了自己的演示,结果如下: 同样的错误,混乱的但是你仍然可以猜测出图片。 我认为我错过了一些显而易见的东西。但是我已经挣扎了几天,自己找不到错误。
非常感谢有人能指点我正确的方向。预先感谢您!
带有错误演示:http://cssing.org.ua/examples/fbo-error/ 完整代码参考:https://github.com/akella/fbo-test
现在使用这篇文章中的代码http://barradeau.com/blog/?p=621。我渲染了一个没有任何移动的粒子球:
目前我所添加的唯一内容是在模拟片段着色器中加入一种纹理:
void main() {
vec3 pos = texture2D( texture, vUv ).xyz;
//THIS LINE, pos is approx in -200..200 range
float map = texture2D(texture1, abs(pos.xy/200.)).r;
...
// save map value in ping-pong texture as alpha
gl_FragColor = vec4( pos, map );
texture1
是:一半黑色,一半白色。
然后在渲染顶点着色器中,我读取了这个贴图参数:
map = texture2D( positions, position.xy ).a;
然后在 渲染 片段着色器中使用它来查看颜色:
vec3 finalColor = mix(vec3(1.,0.,0.),vec3(0.,1.,0.),map);
gl_FragColor = vec4( finalColor, .2 );
我希望看到的是:(通过在渲染着色器中设置相同的纹理实现)
但我真正看到的是:(通过在模拟着色器中设置纹理)
颜色混杂在一起,尽管大多数情况下你会看到更多的红色颗粒在它们应该出现的地方,但是在中间有很多绿色颗粒。我也试着用简化的贴图和相同的想法制作了自己的演示,结果如下: 同样的错误,混乱的但是你仍然可以猜测出图片。 我认为我错过了一些显而易见的东西。但是我已经挣扎了几天,自己找不到错误。
非常感谢有人能指点我正确的方向。预先感谢您!
带有错误演示:http://cssing.org.ua/examples/fbo-error/ 完整代码参考:https://github.com/akella/fbo-test
GL_NEAREST
禁用纹理过滤吗? - keaukraine