obja/src/Model.js

42 lines
1.3 KiB
JavaScript
Raw Normal View History

2019-12-09 18:41:42 +01:00
class Model extends THREE.Mesh {
constructor() {
2019-12-11 14:41:04 +01:00
let geometry = new THREE.Geometry();
2019-12-09 18:41:42 +01:00
let material = new THREE.MeshLambertMaterial({color: 0xffffff});
super(geometry, material);
this.frustumCulled = false;
this.vertices = [];
}
manageElement(element) {
switch (element.type) {
case Element.AddVertex:
2019-12-11 14:41:04 +01:00
this.geometry.vertices.push(element.value);
this.geometry.verticesNeedUpdate = true;
break;
case Element.EditVertex:
this.geometry.vertices[element.id].copy(element.value);
this.geometry.verticesNeedUpdate = true;
this.geometry.elementsNeedUpdate = true;
2019-12-09 18:41:42 +01:00
break;
case Element.AddFace:
2019-12-11 14:41:04 +01:00
let vertices = this.geometry.vertices;
let f = element.value;
2019-12-09 18:41:42 +01:00
let normal =
2019-12-11 14:41:04 +01:00
vertices[f.b].clone().sub(vertices[f.a])
.cross(vertices[f.c].clone().sub(vertices[f.a]));
2019-12-09 18:41:42 +01:00
normal.normalize();
2019-12-11 14:41:04 +01:00
f.normal = normal;
this.geometry.faces.push(f);
this.geometry.elementsNeedUpdate = true;
2019-12-09 18:41:42 +01:00
break;
default:
throw new Error("unknown element type: " + element.type);
}
}
}