我正在尝试使用FBO粒子进行第一人称实验(类似于Doob先生sporel。
我在数据纹理中创建粒子的位置,然后在我的顶点着色器中对纹理进行查找以获得该粒子的位置。
uniform sampler2D map;
varying vec2 vUv;
varying vec3 vPosition;
void main(void) {
vec2 uv = position.xy;
vec4 data = texture2D(map, uv);
vPosition = data.xyz;
gl_PointSize = 1.0;
gl_Position = projectionMatrix * modelViewMatrix * vec4(vPosition, 1.0);
这很好用,最初我看到这里显示的粒子场......
问题是当我走一点并旋转时,所有的粒子突然消失。我做了一堆搜索解决方案,发现this thread建议将material.depthWrite设置为false。我这样做了,无济于事 - 这是我的ShaderMaterial定义:
var particleMaterial = new THREE.ShaderMaterial({
uniforms: uniforms,
vertexShader: shaders.vertexShaders.floor,
fragmentShader: shaders.fragmentShaders.floor,
blending: THREE.AdditiveBlending,
depthWrite: false,
})
我现在感到很茫然,任何帮助都将不胜感激!
谢谢!埃里克