mirror of
https://github.com/WhitestormJS/whs.js.git
synced 2026-01-25 16:08:01 +00:00
117 lines
2.1 KiB
JavaScript
117 lines
2.1 KiB
JavaScript
import * as UTILS from '@utils';
|
|
|
|
const mouse = new WHS.VirtualMouseModule();
|
|
|
|
const app = new WHS.App([
|
|
new WHS.ElementModule(),
|
|
new WHS.SceneModule(),
|
|
new WHS.DefineModule('camera', new WHS.PerspectiveCamera({
|
|
position: new THREE.Vector3(0, 60, 120),
|
|
far: 10000
|
|
})),
|
|
new WHS.RenderingModule({
|
|
bgColor: 0x162129,
|
|
|
|
renderer: {
|
|
antialias: true,
|
|
shadowmap: {
|
|
type: THREE.PCFSoftShadowMap
|
|
}
|
|
}
|
|
}),
|
|
new PHYSICS.WorldModule({
|
|
ammo: process.ammoPath,
|
|
gravity: new THREE.Vector3(0, -9.8, 0),
|
|
softbody: true
|
|
}),
|
|
new WHS.OrbitControlsModule(),
|
|
new WHS.ResizeModule(),
|
|
mouse
|
|
]);
|
|
|
|
const cloth = new WHS.Tube({ // Softbody (blue).
|
|
geometry: {
|
|
path: new THREE.LineCurve3(new THREE.Vector3(0, 40, 0), new THREE.Vector3(0, 10, 0)),
|
|
segments: 20,
|
|
radius: 16,
|
|
radiusSegments: 16,
|
|
closed: false
|
|
},
|
|
|
|
modules: [
|
|
new PHYSICS.SoftbodyModule({
|
|
mass: 1,
|
|
margin: 3,
|
|
damping: 0.03,
|
|
piterations: 12,
|
|
viterations: 12,
|
|
pressure: 300
|
|
})
|
|
],
|
|
|
|
material: new THREE.MeshPhongMaterial({
|
|
color: UTILS.$colors.softbody,
|
|
side: THREE.DoubleSide
|
|
})
|
|
});
|
|
|
|
const arm = new WHS.Box({ // Rigidbody (green).
|
|
geometry: {
|
|
width: 80,
|
|
height: 6,
|
|
depth: 6
|
|
},
|
|
|
|
modules: [
|
|
new PHYSICS.BoxModule({
|
|
mass: 0
|
|
})
|
|
],
|
|
|
|
material: new THREE.MeshPhongMaterial({
|
|
color: UTILS.$colors.mesh
|
|
}),
|
|
|
|
position: {
|
|
y: 50,
|
|
z: 10
|
|
}
|
|
});
|
|
|
|
arm.addTo(app);
|
|
cloth.addTo(app).then(object => object.use('physics')).then(physics => {
|
|
physics.appendAnchor(arm, 0, 1, false);
|
|
physics.appendAnchor(arm, 40, 1, false);
|
|
});
|
|
|
|
new WHS.Box({ // Rigidbody (green).
|
|
geometry: {
|
|
width: 10,
|
|
height: 10,
|
|
depth: 10
|
|
},
|
|
|
|
modules: [
|
|
new PHYSICS.BoxModule({
|
|
mass: 10
|
|
})
|
|
],
|
|
|
|
material: new THREE.MeshPhongMaterial({
|
|
color: UTILS.$colors.mesh
|
|
}),
|
|
|
|
position: {
|
|
y: 18
|
|
}
|
|
}).addTo(app).then(box => {
|
|
mouse.on('move', () => {
|
|
box.use('physics').setLinearVelocity(mouse.project().sub(box.position));
|
|
});
|
|
});
|
|
|
|
UTILS.addBoxPlane(app, 250);
|
|
UTILS.addBasicLights(app, 0.5, [60, 60, 20], 400);
|
|
|
|
app.start();
|