@matematrolii/sketchbook
Version:
3D matematrolii playground built on three.js and cannon.js
48 lines (40 loc) • 1.13 kB
text/typescript
// @ts-ignore
import * as CANNON from 'cannon';
import * as THREE from 'three';
import * as Utils from '../../core/FunctionLibrary';
import {ICollider} from '../../interfaces/ICollider';
import {Object3D} from 'three';
import { threeToCannon } from '../../../lib/utils/three-to-cannon';
export class TrimeshCollider implements ICollider
{
public mesh: any;
public options: any;
public body: CANNON.Body;
public debugModel: any;
constructor(mesh: Object3D, options: any)
{
this.mesh = mesh.clone();
let defaults = {
mass: 0,
position: mesh.position,
rotation: mesh.quaternion,
friction: 0.3
};
options = Utils.setDefaults(options, defaults);
this.options = options;
let mat = new CANNON.Material('triMat');
mat.friction = options.friction;
// mat.restitution = 0.7;
let shape = threeToCannon(this.mesh, {type: threeToCannon.Type.MESH});
// shape['material'] = mat;
// Add phys sphere
let physBox = new CANNON.Body({
mass: options.mass,
position: options.position,
quaternion: options.rotation,
shape: shape
});
physBox.material = mat;
this.body = physBox;
}
}