UNPKG

json-object-editor

Version:

JOE the Json Object Editor | Platform Edition

179 lines (117 loc) 4.88 kB
<!DOCTYPE html> <html> <head> <title>Three.js Viewer</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="three.js"></script> <script src="Detector.js"></script> <script src="OrbitControls.js"></script> <script src="OBJLoader.js"></script> <script src="MTLLoader.js"></script> <script src="http://localhost:2099/JsonObjectEditor/js/libs/craydent-1.9.2.js"></script> <style> body { overflow: hidden; margin: 0; padding: 0; background: #fff; } </style> </head> <body> <script> if (!Detector.webgl) { Detector.addGetWebGLMessage(); } var container; var camera, controls, scene, renderer; var lighting, ambient, keyLight, fillLight, backLight; var windowHalfX = window.innerWidth / 2; var windowHalfY = window.innerHeight / 2; init(); animate(); function init() { container = document.createElement('div'); document.body.appendChild(container); /* Camera */ camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000); camera.position.z = 3; /* Scene */ scene = new THREE.Scene(); lighting = false; ambient = new THREE.AmbientLight(0xffffff, 1.0); scene.add(ambient); keyLight = new THREE.DirectionalLight(new THREE.Color('hsl(30, 100%, 75%)'), 1.0); keyLight.position.set(-100, 0, 100); fillLight = new THREE.DirectionalLight(new THREE.Color('hsl(240, 100%, 75%)'), 0.75); fillLight.position.set(100, 0, 100); backLight = new THREE.DirectionalLight(0xffffff, 1.0); backLight.position.set(100, 0, -100).normalize(); /* Model */ var dir = $GET('dir')||''; if(dir){dir = dir+'/';} var model = $GET('model')||'female-croupier-2013-03-26'; var mtlLoader = new THREE.MTLLoader(); mtlLoader.setBaseUrl('assets/'+dir); mtlLoader.setPath('assets/'+dir); mtlLoader.load(model+'.mtl', function (materials) { materials.preload(); //materials.materials.default.map.magFilter = THREE.NearestFilter; //materials.materials.default.map.minFilter = THREE.LinearFilter; var objLoader = new THREE.OBJLoader(); objLoader.setMaterials(materials); objLoader.setPath('assets/'+dir); objLoader.load(model+'.obj', function (object) { scene.add(object); }); }); /* Renderer */ renderer = new THREE.WebGLRenderer(); renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); renderer.setClearColor(new THREE.Color('#fff')); container.appendChild(renderer.domElement); /* Controls */ controls = new THREE.OrbitControls(camera, renderer.domElement); controls.enableDamping = true; controls.dampingFactor = 0.5; controls.enableZoom = true; /* Events */ window.addEventListener('resize', onWindowResize, false); window.addEventListener('keydown', onKeyboardEvent, false); } function onWindowResize() { windowHalfX = window.innerWidth / 2; windowHalfY = window.innerHeight / 2; camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); } function onKeyboardEvent(e) { if (e.code === 'KeyL') { lighting = !lighting; if (lighting) { ambient.intensity = 0.25; scene.add(keyLight); scene.add(fillLight); scene.add(backLight); } else { ambient.intensity = 1.0; scene.remove(keyLight); scene.remove(fillLight); scene.remove(backLight); } } } function animate() { requestAnimationFrame(animate); controls.update(); render(); } function render() { renderer.render(scene, camera); } </script> </body> </html>