Javascript 更改位置3.js/webgl顶点着色器

Javascript 更改位置3.js/webgl顶点着色器,javascript,opengl-es,three.js,particle-system,Javascript,Opengl Es,Three.js,Particle System,嗨,我制作了一个粒子系统,有三个.js,它使用普通的JavaScript循环来改变粒子的位置,但是速度很慢 因此,我开始学习如何通过着色器将其传输到GPU 我有一个问题,我不能改变位置,每个点保持在同一位置 var vertexShader = [ 'void main() {', ' vec3 newPosition = position.xyz;', ' newPosition.y += 10.0;', ' g

嗨,我制作了一个粒子系统,有三个.js,它使用普通的JavaScript循环来改变粒子的位置,但是速度很慢

因此,我开始学习如何通过着色器将其传输到GPU

我有一个问题,我不能改变位置,每个点保持在同一位置

var vertexShader = [
        'void main() {',
        '    vec3 newPosition = position.xyz;',
        '    newPosition.y += 10.0;',
        '    gl_PointSize = 1.00;',
        '    gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );',
        '}',
    ].join('\n');
为什么

'    newPosition.y += 10.0;',
不改变粒子的位置

我是否需要某种时间变量,我注意到人们似乎有这些?
谢谢。

我计算出来了,位置是一个属性,我需要向着色器传递一个统一的属性,这可以用来增加位置属性

顶点着色器:

var vertexShader = [
        'uniform float time;',
        'void main() {',
        '   vec3 newPos = position;',
        '   newPos.x += time;',
        '   gl_PointSize = 1.00;',
        '   gl_Position = projectionMatrix * modelViewMatrix * vec4( newPos, 1.0 );',
        '}',
    ].join('\n');

什么是
位置
?制服?我不知道,我是这样使用的:_this.geometry.addAttribute('position',new THREE.BufferAttribute(_this.particleVertices,3));好的,我刚刚读到,位置是一个属性而不是一个统一的属性,我认为从主程序更新统一是正确的,但属性不是吗?现在我明白了为什么人们使用时间变量,统一是更新的,随着每个渲染循环,这个值可以应用到属性,现在我的粒子正在移动,感谢Austin。