diff options
Diffstat (limited to 'Scripts')
| -rw-r--r-- | Scripts/main.js | 85 |
1 files changed, 60 insertions, 25 deletions
diff --git a/Scripts/main.js b/Scripts/main.js index 1f26606..fb7a8b2 100644 --- a/Scripts/main.js +++ b/Scripts/main.js @@ -76,7 +76,7 @@ function init() { vertexWeights = [];
- static CreateBasic(width, height, numPointsWidth, numPointsHeight) {
+ createBasic(width, height, numPointsWidth, numPointsHeight) {
let vertices = [];
let faces = [];
@@ -115,46 +115,78 @@ function init() { }
}
- return this.CreateExplicit(vertices, faces);
+ this.createExplicit(vertices, faces);
}
- static CreateExplicit(vertices, faces) {
- let result = new Cloth();
-
+ createExplicit(vertices, faces) {
for (let i in vertices) {
- result.geometry.vertices.push(vertices[i]);
- result.vertexWeights.push(0);
+ this.geometry.vertices.push(vertices[i]);
+ this.vertexWeights.push(0);
}
- console.log(vertices);
for (let i in faces) {
let face = faces[i];
- result.geometry.faces.push(new THREE.Face3(
+ this.faces.push(face);
+
+ this.geometry.faces.push(new THREE.Face3(
face.a, face.b, face.c
));
- result.geometry.faces.push(new THREE.Face3(
+ this.geometry.faces.push(new THREE.Face3(
face.c, face.b, face.d
));
-
- console.log(face);
- let xLength = vectorLength(result.geometry.vertices[face.b], result.geometry.vertices[face.a]);
- let yLength = vectorLength(result.geometry.vertices[face.c], result.geometry.vertices[face.a]);
+ let xLength = vectorLength(this.geometry.vertices[face.b], this.geometry.vertices[face.a]);
+ let yLength = vectorLength(this.geometry.vertices[face.c], this.geometry.vertices[face.a]);
let weight = xLength * yLength / 2;
- xLength = vectorLength(result.geometry.vertices[face.b], result.geometry.vertices[face.d]);
- yLength = vectorLength(result.geometry.vertices[face.c], result.geometry.vertices[face.d]);
+ xLength = vectorLength(this.geometry.vertices[face.b], this.geometry.vertices[face.d]);
+ yLength = vectorLength(this.geometry.vertices[face.c], this.geometry.vertices[face.d]);
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;
+ this.vertexWeights[face.a] += weight / 4;
+ this.vertexWeights[face.b] += weight / 4;
+ this.vertexWeights[face.c] += weight / 4;
+ this.vertexWeights[face.d] += weight / 4;
}
- result.geometry.computeBoundingSphere();
+ this.geometry.computeBoundingSphere();
+ }
- return result;
+ createDebugMesh(scene) {
+ function addLine(from, to, color) {
+ let geometry = new THREE.Geometry();
+ geometry.vertices.push(from);
+ geometry.vertices.push(to);
+ let material = new THREE.LineBasicMaterial( { color: color, linewidth: 10 } );
+ let line = new THREE.Line(geometry, material);
+ line.renderOrder = 1;
+ scene.add(line);
+ }
+ function addPoint(point, color) {
+ const geometry = new THREE.SphereGeometry( 0.05, 32, 32 );
+ const material = new THREE.MeshBasicMaterial( { color: color } );
+ const sphere = new THREE.Mesh( geometry, material );
+ sphere.position.set(point.x, point.y, point.z);
+ scene.add( sphere );
+ }
+
+ let lineColor = 0x000000;
+ let pointColor = 0xff00000;
+
+ for (let i in this.faces) {
+ let face = this.faces[i];
+ addLine(this.geometry.vertices[face.a], this.geometry.vertices[face.b], lineColor);
+ addLine(this.geometry.vertices[face.a], this.geometry.vertices[face.c], lineColor);
+ addLine(this.geometry.vertices[face.a], this.geometry.vertices[face.d], lineColor);
+ addLine(this.geometry.vertices[face.b], this.geometry.vertices[face.c], lineColor);
+ addLine(this.geometry.vertices[face.b], this.geometry.vertices[face.d], lineColor);
+ addLine(this.geometry.vertices[face.c], this.geometry.vertices[face.d], lineColor);
+
+ addPoint(this.geometry.vertices[face.a], pointColor);
+ addPoint(this.geometry.vertices[face.b], pointColor);
+ addPoint(this.geometry.vertices[face.c], pointColor);
+ addPoint(this.geometry.vertices[face.d], pointColor);
+ }
}
}
@@ -172,13 +204,17 @@ function init() { const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
scene.add(directionalLight);
- let cloth = Cloth.CreateBasic(10, 10, 5, 5);
- const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
+ let cloth = new Cloth();
+ cloth.createBasic(10, 10, 5, 5);
+ cloth.createDebugMesh(scene);
+
+ const material = new THREE.MeshBasicMaterial({ color: 0x0000ff });
const mesh = new THREE.Mesh(cloth.geometry, material);
scene.add(mesh);
camera.position.y = 5;
camera.position.z = 10;
+ //camera.lookAt(new THREE.Vector3(1, 0, 0));
function animate(dt) {
requestAnimationFrame(animate);
@@ -195,7 +231,6 @@ function init() { window.onresize = resize;
resize();
if (canvas.getContext) {
- ctx = canvas.getContext('2d');
animate(performance.now());
}
canvas.onmousemove = (evt) => {
|
