jsketcher/modules/scene/cameraControlRenderer.js
2018-10-01 23:30:36 -07:00

67 lines
1.7 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 '../../web/app/math/l3space';
export default function(container) {
function createBasisArrow(axis, color) {
return new MeshArrow(axis, color, 1, 0.3, 0.15, 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
}
}