Javascript 更改位置3.js/webgl顶点着色器
嗨,我制作了一个粒子系统,有三个.js,它使用普通的JavaScript循环来改变粒子的位置,但是速度很慢 因此,我开始学习如何通过着色器将其传输到GPU 我有一个问题,我不能改变位置,每个点保持在同一位置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
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。