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 += "