diff options
Diffstat (limited to 'Scripts/main.js')
| -rw-r--r-- | Scripts/main.js | 67 |
1 files changed, 58 insertions, 9 deletions
diff --git a/Scripts/main.js b/Scripts/main.js index 843c19a..2388293 100644 --- a/Scripts/main.js +++ b/Scripts/main.js @@ -26,10 +26,31 @@ function init() { }
}
+ class Face {
+ indices = [];
+
+ constructor(a, b, c, d) {
+ this.indices.push(a);
+ this.indices.push(b);
+ this.indices.push(c);
+ this.indices.push(d);
+ }
+ }
+
class Cloth {
+ VertexWeight = 1;
+
geometry = new THREE.Geometry();
-
+ faces = [];
+
+ vertexWeights = [];
+
+ springs = [];
+
+ getSprings(faceIndex) {
+
+ }
static CreateBasic(width, height, numPointsWidth, numPointsHeight) {
let vertices = [];
@@ -53,16 +74,10 @@ function init() { for (let y = 0; y < numPointsHeight - 1; y++) {
for (let x = 0; x < numPointsWidth - 1; x++) {
faces.push(
- new THREE.Face3(
+ new Face(
getVertexIndex(x, y),
getVertexIndex(x, y + 1),
getVertexIndex(x + 1, y),
- )
- );
- faces.push(
- new THREE.Face3(
- getVertexIndex(x + 1, y),
- getVertexIndex(x, y + 1),
getVertexIndex(x + 1, y + 1),
)
);
@@ -77,9 +92,43 @@ function init() { for (let i in vertices) {
result.geometry.vertices.push(vertices[i]);
+ result.vertexWeights.push(0);
}
for (let i in faces) {
- result.geometry.faces.push(faces[i]);
+ let face = faces[i];
+
+ result.geometry.faces.push(new THREE.Face3(
+ face.a, face.b, face.c
+ ));
+ result.geometry.faces.push(new THREE.Face3(
+ face.c, face.b, face.d
+ ));
+
+ let xLength =
+ result.geometry.vertices[face.b]
+ .sub(result.geometry.vertices[face.a])
+ .length();
+ let yLength =
+ result.geometry.vertices[face.c]
+ .sub(result.geometry.vertices[face.a])
+ .length();
+ let weight = xLength * yLength / 2;
+
+ xLength =
+ result.geometry.vertices[face.b]
+ .sub(result.geometry.vertices[face.d])
+ .length();
+ yLength =
+ result.geometry.vertices[face.c]
+ .sub(result.geometry.vertices[face.d])
+ .length();
+
+ weight += xLength * yLength / 2;
+
+ result.vertexWeights[face.a] += weight / 4;
+ result.vertexWeights[face.b] += weight / 4;
+ result.vertexWeights[face.c] += weight / 4;
+ result.vertexWeights[face.d] += weight / 4;
}
result.geometry.computeBoundingSphere();
|
