创建geometry,并给着色器传随机数 aRandom
const geometry = new THREE.PlaneGeometry(1, 1, 32, 32) const count = geometry.attributes.position.count const randoms = new Float32Array(count) for (let i = 0; i < count; i++) { randoms[i] = Math.random() } geometry.setAttribute('aRandom', new THREE.BufferAttribute(randoms, 1))
顶点着色器接受参数
uniform mat4 projectionMatrix; uniform mat4 modelMatrix; uniform mat4 viewMatrix; attribute vec3 position; attribute float aRandom; // 接受来自geometry的aRandom void main() { vec4 modelPosition = modelMatrix * vec4(position, 1.0); modelPosition.z += aRandom * 0.1; // 赋值给 vec4 viewPosition = viewMatrix * modelPosition; vec4 projectedPosition = projectionMatrix * viewPosition; gl_Position = projectedPosition; }