From 351f8c1843efc3a49c38f931662d047fd906afea Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 18 Mar 2021 13:28:59 +0100 Subject: [PATCH] rename to match mass spring model --- Scripts/cloth.js | 74 ++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/Scripts/cloth.js b/Scripts/cloth.js index c77fb1c..26a8ffe 100644 --- a/Scripts/cloth.js +++ b/Scripts/cloth.js @@ -13,7 +13,7 @@ const options = { wind: true, }; -class Constraint { +class Spring { constructor(p1, p2, restDist) { this.p1 = p1; this.p2 = p2; @@ -48,7 +48,7 @@ class Constraint { } } -class Particle { +class Mass { movableTmp = true; movable = true; @@ -99,13 +99,13 @@ class Cloth { /** * iterate over the number of vertices in x/y axis - * and add a new Particle to "particles" + * and add a new Particle to "masses" */ - this.particles = []; + this.masses = []; for (let y = 0; y < numPointsHeight; y++) { for (let x = 0; x < numPointsWidth; x++) { - this.particles.push( - new Particle( + this.masses.push( + new Mass( (x - ((numPointsWidth-1)/2)) * stepWidth, height - (y + ((numPointsHeight-1)/2)) * stepHeight, 0, @@ -114,33 +114,33 @@ class Cloth { } } - //this.particles[this.getVertexIndex(0, 0)].movable = false; + //this.masses[this.getVertexIndex(0, 0)].movable = false; const n = 3; for (let i = 0; i < numPointsHeight; i++) - this.particles[this.getVertexIndex(0, i)].movable = false; - //this.particles[this.getVertexIndex(0, numPointsHeight-1)].movable = false; - //this.particles[this.getVertexIndex(numPointsWidth-1, 0)].movable = false; + this.masses[this.getVertexIndex(0, i)].movable = false; + //this.masses[this.getVertexIndex(0, numPointsHeight-1)].movable = false; + //this.masses[this.getVertexIndex(numPointsWidth-1, 0)].movable = false; const REST_DIST_X = width / (numPointsWidth-1); const REST_DIST_Y = height / (numPointsHeight-1); /** - * generate constraints (springs) + * generate springs (springs) */ - this.constraints = []; + this.springs = []; for (let y = 0; y < numPointsHeight; y++) { for (let x = 0; x < numPointsWidth; x++) { if (x < numPointsWidth-1) { - this.constraints.push(new Constraint( - this.particles[this.getVertexIndex(x, y)], - this.particles[this.getVertexIndex(x+1, y)], + this.springs.push(new Spring( + this.masses[this.getVertexIndex(x, y)], + this.masses[this.getVertexIndex(x+1, y)], REST_DIST_X )); } if (y < numPointsHeight-1) { - this.constraints.push(new Constraint( - this.particles[this.getVertexIndex(x, y)], - this.particles[this.getVertexIndex(x, y+1)], + this.springs.push(new Spring( + this.masses[this.getVertexIndex(x, y)], + this.masses[this.getVertexIndex(x, y+1)], REST_DIST_Y )); } @@ -154,8 +154,8 @@ class Cloth { const indices = []; const uvs = []; - for (let i in this.particles) { - let particle = this.particles[i]; + for (let i in this.masses) { + let particle = this.masses[i]; vertices.push( particle.position.x, particle.position.y, @@ -195,8 +195,8 @@ class Cloth { } updateGeometry(geometry) { const positions = geometry.attributes.position.array; - for (let i in this.particles) { - let p = this.particles[i]; + for (let i in this.masses) { + let p = this.masses[i]; positions[i*3+0] = p.position.x; positions[i*3+1] = p.position.y; positions[i*3+2] = p.position.z; @@ -207,8 +207,8 @@ class Cloth { } simulate(dt) { let now = performance.now(); - for (let particle of this.particles) { - let vertex = particle.position; + for (let mass of this.masses) { + let vertex = mass.position; let fWind = new THREE.Vector3( this.windFactor.x * (Math.sin(vertex.x * vertex.y * now)+1), this.windFactor.y * Math.cos(vertex.z * now), @@ -216,16 +216,16 @@ class Cloth { ); // normalize then multiply? if (options.wind) - particle.addForce(fWind); + mass.addForce(fWind); // calculate wind with normal? - particle.addForce(GRAVITY); + mass.addForce(GRAVITY); - particle.verlet(dt); + mass.verlet(dt); } - for (let constraint of this.constraints) { + for (let constraint of this.springs) { constraint.satisfy(); } @@ -233,10 +233,10 @@ class Cloth { } intersect() { - for (let i in this.particles) { - for (let j in this.particles) { - let p1 = this.particles[i]; - let p2 = this.particles[j]; + for (let i in this.masses) { + for (let j in this.masses) { + let p1 = this.masses[i]; + let p2 = this.masses[j]; p1.movableTmp = true; p2.movableTmp = true; @@ -273,13 +273,13 @@ class Cloth { blow(camPos, intersects) { let face = intersects[0].face; let dir = intersects[0].point.clone().sub(camPos).multiplyScalar(100); - this.particles[face.a].addForce(dir); - this.particles[face.b].addForce(dir); - this.particles[face.c].addForce(dir); + this.masses[face.a].addForce(dir); + this.masses[face.b].addForce(dir); + this.masses[face.c].addForce(dir); } drag(mousePosWorld, index) { - let dir = mousePosWorld.clone().sub(this.particles[index].position).multiplyScalar(200); - this.particles[index].addForce(dir); + let dir = mousePosWorld.clone().sub(this.masses[index].position).multiplyScalar(200); + this.masses[index].addForce(dir); } /** -- 2.50.1