import * as THREE from './lib/three.module.js'; import { PCDLoader } from './lib/PCDLoader.js'; import { OrbitControls } from './lib/OrbitControls.js'; import { GUI } from './lib/dat.gui.module.js'; import {TextFileLoader} from "./text_file_loader.js"; var container, stats; var camera, controls, scene, renderer; var camera; var params = { src: true, tgt: true, out: true, reload: load_all, }; var last_cloud_ind = { src: true, tgt: true, out: true, } var clouds ={}; init(); animate(); function init() { document.body.addEventListener('keydown', event => { if (event.ctrlKey && 'asdv'.indexOf(event.key) !== -1) { event.preventDefault() } }) scene = new THREE.Scene(); renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setPixelRatio( window.devicePixelRatio ); camera = new THREE.PerspectiveCamera( 65, window.innerWidth / window.innerHeight, 1, 800 ); camera.position.x = 0; camera.position.z = 50; camera.position.y = 0; camera.up.set( 0, 0, 1); camera.lookAt( 0, 0, 0 ); controls = new OrbitControls( camera, renderer.domElement ); controls.addEventListener( 'change', render ); // call this only in static scenes (i.e., if there is no animation loop) container = document.createElement( 'container' ); document.body.appendChild( container ); container.appendChild( renderer.domElement ); document.addEventListener("keydown", keydown) init_gui(); //scene.add( new THREE.AxesHelper( 2 ) ); onWindowResize(); window.addEventListener( 'resize', onWindowResize, false ); load_all(); render(); } function load_all(){ clearAll(); load_pcd("src", "/temp/src.pcd", 0xff0000); load_pcd("tgt", "/temp/tgt.pcd", 0x00ff00); load_pcd("out", "/temp/out.pcd", 0xffff00); load_transform_matrix(); } function clearAll(){ remove(clouds["src"]); remove(clouds["tgt"]); remove(clouds["out"]); clouds["src"] = null; clouds["tgt"] = null; clouds["our"] = null; function remove(p){ if (p){ scene.remove(p); p.geometry.dispose(); p.material.dispose(); } } } function keydown( ev ) { switch ( ev.key) { case '+': clouds["src"].material.size *= 1.2; clouds["tgt"].material.size *= 1.2; clouds["out"].material.size *= 1.2; break; case '-': clouds["src"].material.size /= 1.2; clouds["tgt"].material.size /= 1.2; clouds["out"].material.size /= 1.2; break; } } function onWindowResize() { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize( window.innerWidth, window.innerHeight ); } function animate() { requestAnimationFrame( animate ); controls.update(); render(); switch_cloud("src"); switch_cloud("tgt"); switch_cloud("out"); function switch_cloud(name){ if (params[name] != last_cloud_ind[name]){ last_cloud_ind[name] = params[name]; if (last_cloud_ind[name]){ scene.add(clouds[name]); }else { scene.remove(clouds[name]); } } } } function render(){ renderer.render( scene, camera ); } function load_transform_matrix(){ var loader = new TextFileLoader(); loader.load( "/temp/trans.json", function(json){ console.log(json); var mat = JSON.parse(json); var trans_html = "
| "+ mat[i*4+j] + " | "; trans_html += "