From c061ca66adc53232724ce9991fbe8d10c041af36 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Patrick=20Sch=C3=B6nberger?= Date: Mon, 4 Jan 2021 15:57:20 +0100 Subject: [PATCH] Change Face Representation --- Scripts/main.js | 67 ++++++++++++++++++++++++++++++++++++++++++------- 1 file 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(); -- 2.50.1