From 44436c7880a40597c7b74151d342ae8092fba499 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 18 Mar 2021 13:26:11 +0100 Subject: [PATCH] fix exploding behaviour --- Scripts/cloth.js | 44 ++++++++++++++++---- Scripts/main.js | 99 ++++++++++++++++++++++++--------------------- Textures/hsrm2.png | Bin 0 -> 36221 bytes index.html | 2 +- 4 files changed, 89 insertions(+), 56 deletions(-) create mode 100644 Textures/hsrm2.png diff --git a/Scripts/cloth.js b/Scripts/cloth.js index 5a7a0f2..c77fb1c 100644 --- a/Scripts/cloth.js +++ b/Scripts/cloth.js @@ -3,8 +3,11 @@ const DRAG = 1 - DAMPING; const MASS = 0.1; const GRAVITY = new THREE.Vector3(0, -9.81 * MASS, 0); const K = 1; +const MAX_STRETCH = 1.5; -// Flag Texture +// Explosion am Anfang +// Intersect mit Velocity? +// Wind/Ziehen const options = { wind: true, @@ -25,7 +28,10 @@ class Constraint { //const correction = diff.multiplyScalar(1 - (this.restDist / currentDist)); const correction = diff.multiplyScalar((currentDist - this.restDist) / currentDist); correction.multiplyScalar(K); - correction.clampLength(0, 1); + if (currentDist >= this.restDist * MAX_STRETCH) { + + } + //correction.clampLength(0, 1); const correctionHalf = correction.multiplyScalar(0.5); let p1movable = this.p1.movable && this.p1.movableTmp; @@ -223,7 +229,7 @@ class Cloth { constraint.satisfy(); } - this.intersect(); + //this.intersect(); } intersect() { @@ -239,20 +245,42 @@ class Cloth { continue; let dist = p1.position.distanceTo(p2.position); - const collisionDistance = Math.min(this.width / this.numPointsWidth, this.height / this.numPointsHeight); + let collisionDistance = Math.min(this.width / this.numPointsWidth, this.height / this.numPointsHeight); + // collisionDistance /= 2; if (dist < collisionDistance) { // p1.movableTmp = false; // p2.movableTmp = false; - let diff = p1.position.clone().sub(p2.position).normalize(); - diff.multiplyScalar((collisionDistance - dist) * 1.001 / 2); + let diffP2P1 = p1.position.clone().sub(p2.position).normalize(); + diffP2P1.multiplyScalar((collisionDistance - dist) * 1.001 / 2); + let diffP1P2 = diffP2P1.clone().multiplyScalar(-1); + + // let v1 = p1.position.clone().sub(p1.previous).normalize(); + // let v2 = p2.position.clone().sub(p2.previous).normalize(); + + // let factor1 = (Math.PI - Math.acos(v1.dot(diffP2P1))) / Math.PI * 2; + // let factor2 = (Math.PI - Math.acos(v2.dot(diffP1P2))) / Math.PI * 2; + if (p1.movable) - p1.position.add(diff); + p1.position.add(diffP2P1); + //p1.position.add(diffP2P1.multiplyScalar(factor1)); if (p2.movable) - p2.position.sub(diff); + p2.position.add(diffP1P2); + //p2.position.add(diffP1P2.multiplyScalar(factor2)); } } } } + 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); + } + drag(mousePosWorld, index) { + let dir = mousePosWorld.clone().sub(this.particles[index].position).multiplyScalar(200); + this.particles[index].addForce(dir); + } /** * helper function to calculate index of vertex diff --git a/Scripts/main.js b/Scripts/main.js index 5e68a4f..51d6762 100644 --- a/Scripts/main.js +++ b/Scripts/main.js @@ -1,19 +1,19 @@ function addLights(scene){ - scene.add( new THREE.AmbientLight( 0x222222 ) ); + scene.add(new THREE.AmbientLight(0x222222)); - const light1 = new THREE.PointLight( 0xffffff, 1, 50 ); - light1.position.set( 15, 1, 40 ); - scene.add( light1 ); + const light1 = new THREE.PointLight(0xffffff, 1, 50); + light1.position.set(15, 1, 40); + scene.add(light1); - const light2 = new THREE.PointLight( 0xffffff, 1, 50 ); - light2.position.set( -15, 0, 40 ); - scene.add( light2 ); + const light2 = new THREE.PointLight(0xffffff, 1, 50); + light2.position.set(-15, 0, 40); + scene.add(light2); - const light3 = new THREE.PointLight( 0xffffff, 1, 50 ); - light3.position.set( 0, -1, 40 ); - scene.add( light3 ); + const light3 = new THREE.PointLight(0xffffff, 1, 50); + light3.position.set(0, -1, 40); + scene.add(light3); } /** @@ -45,11 +45,11 @@ function setup_scene(canvasSpace) { }); /** add flag pole */ - const geometry = new THREE.CylinderGeometry( 0.02, 0.02, 5, 32 ); - const material = new THREE.MeshStandardMaterial( {color: 0xffffff} ); - const cylinder = new THREE.Mesh( geometry, material ); + const geometry = new THREE.CylinderGeometry(0.02, 0.02, 5, 32); + const material = new THREE.MeshStandardMaterial({color: 0xffffff}); + const cylinder = new THREE.Mesh(geometry, material); cylinder.position.set(-0.5, -2.25, 0); - scene.add( cylinder ); + scene.add(cylinder); /** add global light */ const directionalLight = new THREE.DirectionalLight(0xffffff, 1); @@ -84,7 +84,7 @@ function init() { const cloth = new Cloth(1, 0.5, 20, 20); const clothGeometry = cloth.generateGeometry(); - const clothMaterial = new THREE.MeshStandardMaterial({ map: loader.load('Textures/hsrm.jpg'), color: 0xffffff, side: THREE.DoubleSide, flatShading: false}); + const clothMaterial = new THREE.MeshStandardMaterial({ map: loader.load('Textures/hsrm2.png'), color: {type: "c", value: new THREE.Color(0xffffff)}, side: THREE.DoubleSide, flatShading: false, transparent: true }); //const clothMaterial = new THREE.MeshStandardMaterial({ color: 0xC70039, side: THREE.DoubleSide, flatShading: false }); const clothMesh = new THREE.Mesh(clothGeometry, clothMaterial); scene.add(clothMesh); @@ -96,7 +96,9 @@ function init() { let raycaster = new THREE.Raycaster(); let intersects; - let rightMousePressed; + let windKeyDown = false; + let dragKeyDown = false; + let draggedIndex = -1; /** * function called every frame * @param {number} dt - time passed since last frame in ms @@ -106,13 +108,18 @@ function init() { cloth.updateGeometry(clothGeometry); - raycaster.setFromCamera( new THREE.Vector2((mousePos.x / w) * 2 - 1, ((h - mousePos.y) / h) * 2 - 1), camera ); - - // intersects = raycaster.intersectObject( mesh ); - - // if ( intersects.length > 0 && rightMousePressed) { - // // Cloth mouse interaction - // } + raycaster.setFromCamera(new THREE.Vector2((mousePos.x / w) * 2 - 1, ((h - mousePos.y) / h) * 2 - 1), camera); + + intersects = raycaster.intersectObject(clothMesh); + + if (intersects.length > 0) { + if (windKeyDown) + cloth.blow(camera.position, intersects); + if (dragKeyDown && draggedIndex == -1) + draggedIndex = intersects[0].face.a; + } + if (dragKeyDown && draggedIndex != -1) + cloth.drag(calculateMousePosToWorld(mousePos), draggedIndex); setTimeout(() => { animate(frameTime); }, frameTime); @@ -138,7 +145,7 @@ function init() { * start rendering */ if (canvas.getContext) { - animate(performance.now()); + animate(frameTime); } @@ -147,8 +154,6 @@ function init() { canvas.onmousemove = (evt) => { mousePos.x = evt.clientX; mousePos.y = evt.clientY; - - //cloth.mouseMove(calculateMousePosToWorld(evt)); }; /** @@ -158,38 +163,38 @@ function init() { evt.preventDefault(); }, false); + document.onkeydown = (evt) => { + if (evt.code === "KeyW") + windKeyDown = true; + if (evt.code === "KeyD") + dragKeyDown = true; + }; - canvas.onmousedown = (evt) => { - - // Check mouse click - rightMousePressed = evt.button == 2; - - if(intersects.length > 0 && evt.button == 0){ - //cloth.mousePress(intersects); - } - } - - canvas.onmouseup = (evt) => { - //cloth.mouseRelease(); - rightMousePressed = false; - } + document.onkeyup = (evt) => { + if (evt.code === "KeyW") + windKeyDown = false; + if (evt.code === "KeyD") { + dragKeyDown = false; + draggedIndex = -1; + } + }; - function calculateMousePosToWorld(evt){ + function calculateMousePosToWorld(mousePos){ var vec = new THREE.Vector3(); // create once and reuse var pos = new THREE.Vector3(); // create once and reuse vec.set( - ( evt.clientX / window.innerWidth ) * 2 - 1, - - ( evt.clientY / window.innerHeight ) * 2 + 1, - 0.5 ); + (mousePos.x / window.innerWidth) * 2 - 1, + - (mousePos.y / window.innerHeight) * 2 + 1, + 0.5); - vec.unproject( camera ); + vec.unproject(camera); - vec.sub( camera.position ).normalize(); + vec.sub(camera.position).normalize(); var distance = - camera.position.z / vec.z; - pos.copy( camera.position ).add( vec.multiplyScalar( distance ) ); + pos.copy(camera.position).add(vec.multiplyScalar(distance)); return pos; } } \ No newline at end of file diff --git a/Textures/hsrm2.png b/Textures/hsrm2.png new file mode 100644 index 0000000000000000000000000000000000000000..6b83d6b167d358c0ec307b8f48b06a7c59b2cf28 GIT binary patch literal 36221 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 L>gTe~DWM4f2KhxI literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 14f79e4..de3e51b 100644 --- a/index.html +++ b/index.html @@ -20,7 +20,7 @@
- Wind + Wind \ No newline at end of file -- 2.50.1