diff options
| -rw-r--r-- | Scripts/cloth.js | 74 |
1 files 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);
}
/**
|
