jsketcher/modules/scene/cameraControlRenderer.js
2020-06-20 21:53:23 -07:00

74 lines
1.8 KiB
JavaScript

import {AmbientLight, PerspectiveCamera, Scene, SpotLight, WebGLRenderer} from 'three';
import DPR from '../dpr';
import {MeshArrow} from './objects/auxiliary';
import * as SceneGraph from './sceneGraph';
import {AXIS} from '../math/l3space';
export default function(container) {
function createBasisArrow(axis, color) {
return new MeshArrow({
dir: axis,
color,
length: 1,
headLength: 0.3,
headWidth: 0.15,
lineWidth: 0.02
});
}
let xAxis = createBasisArrow(AXIS.X, 0xFF0000);
let yAxis = createBasisArrow(AXIS.Y, 0x00FF00);
let zAxis = createBasisArrow(AXIS.Z, 0x0000FF);
let root = SceneGraph.createGroup();
let csys = SceneGraph.createGroup();
let scene = new Scene();
csys.add(xAxis);
csys.add(yAxis);
csys.add(zAxis);
root.add(csys);
scene.add(root);
let ambientLight = new AmbientLight(0x0f0f0f);
scene.add(ambientLight);
let spotLight = new SpotLight(0xffffff);
spotLight.position.set(0, 0, 5);
spotLight.castShadow = true;
scene.add(spotLight);
let camera = new PerspectiveCamera( 25, 1, 0.1, 2000 );
camera.position.x = 0;
camera.position.y = 0;
camera.position.z = 5;
let renderer = new WebGLRenderer({ alpha: true });
renderer.setPixelRatio(DPR);
// renderer.setClearColor(0x000000, 1);
// renderer.setClearAlpha(0);
renderer.setSize( container.clientWidth, container.clientHeight );
container.appendChild( renderer.domElement );
function renderScene() {
renderer.render(scene, camera);
}
function render(cameraToSync) {
root.quaternion.setFromRotationMatrix( cameraToSync.matrixWorldInverse );
renderScene();
}
function dispose() {
xAxis.dispose();
yAxis.dispose();
zAxis.dispose();
renderer.dispose();
}
return {
render, dispose
}
}