@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
46 lines (37 loc) • 1.28 kB
JavaScript
import { DrawMode } from "./DrawMode.js";
import { Line, LineSegments, Mesh, Points } from "three";
import { ShadedGeometryFlags } from "./ShadedGeometryFlags.js";
/**
*
* @param {ShadedGeometry} sg
* @returns {THREE.Object3D}
*/
export function build_three_object(sg) {
/**
* @type {THREE.Object3D}
*/
let object;
const mode = sg.mode;
const shader = sg.material;
const geo = sg.geometry;
if (mode === DrawMode.Triangles) {
object = new Mesh(geo, shader);
} else if (mode === DrawMode.Lines) {
object = new Line(geo, shader);
} else if (mode === DrawMode.LineSegments) {
object = new LineSegments(geo, shader);
} else if (mode === DrawMode.Points) {
object = new Points(geo, shader);
} else {
throw new Error(`Unsupported draw mode '${mode}'`);
}
object.matrixAutoUpdate = false;
object.frustumCulled = false;
object.matrixWorldNeedsUpdate = false;
object.castShadow = sg.getFlag(ShadedGeometryFlags.CastShadow);
object.receiveShadow = sg.getFlag(ShadedGeometryFlags.ReceiveShadow);
if (sg.depth_material !== null) {
object.customDepthMaterial = sg.depth_material;
}
return object;
}