diff --git a/src/components/Test2.vue b/src/components/Test2.vue index fbd8ad7..09474bd 100644 --- a/src/components/Test2.vue +++ b/src/components/Test2.vue @@ -4,8 +4,8 @@ - - + + @@ -38,10 +38,11 @@ export default { EffectComposer, RenderPass, UnrealBloomPass, }, setup() { - const NUM_INSTANCES = 2500; + const NUM_INSTANCES = 2000; const instances = []; const target = new Vector3(); - const dummy = new Object3D(); + const dummyO = new Object3D(); + const dummyV = new Vector3(); for (let i = 0; i < NUM_INSTANCES; i++) { instances.push({ @@ -58,7 +59,8 @@ export default { NUM_INSTANCES, instances, target, - dummy, + dummyO, + dummyV, }; }, mounted() { @@ -71,11 +73,11 @@ export default { init() { // init instanced mesh matrix for (let i = 0; i < this.NUM_INSTANCES; i++) { - const { position, scale } = this.instances[i]; - this.dummy.position.copy(position); - this.dummy.scale.set(scale, scale, scale); - this.dummy.updateMatrix(); - this.imesh.setMatrixAt(i, this.dummy.matrix); + const { position, scale, scaleZ } = this.instances[i]; + this.dummyO.position.copy(position); + this.dummyO.scale.set(scale, scale, scaleZ); + this.dummyO.updateMatrix(); + this.imesh.setMatrixAt(i, this.dummyO.matrix); } this.imesh.instanceMatrix.needsUpdate = true; @@ -86,19 +88,18 @@ export default { this.target.copy(this.renderer.three.mouseV3); this.light.position.copy(this.target); - const v = new Vector3(); for (let i = 0; i < this.NUM_INSTANCES; i++) { const { position, scale, scaleZ, velocity, attraction, vlimit } = this.instances[i]; - v.copy(this.target).sub(position).normalize().multiplyScalar(attraction); - velocity.add(v).clampScalar(-vlimit, vlimit); + this.dummyV.copy(this.target).sub(position).normalize().multiplyScalar(attraction); + velocity.add(this.dummyV).clampScalar(-vlimit, vlimit); position.add(velocity); - this.dummy.position.copy(position); - this.dummy.scale.set(scale, scale, scaleZ); - this.dummy.lookAt(v.copy(position).add(velocity)); - this.dummy.updateMatrix(); - this.imesh.setMatrixAt(i, this.dummy.matrix); + this.dummyO.position.copy(position); + this.dummyO.scale.set(scale, scale, scaleZ); + this.dummyO.lookAt(this.dummyV.copy(position).add(velocity)); + this.dummyO.updateMatrix(); + this.imesh.setMatrixAt(i, this.dummyO.matrix); } this.imesh.instanceMatrix.needsUpdate = true; },