1. 程式人生 > >77 Three.js 匯入BABYLON格式的模型

77 Three.js 匯入BABYLON格式的模型

var renderer; function initRender() { renderer = new THREE.WebGLRenderer({antialias:true}); renderer.setSize(window.innerWidth, window.innerHeight); //告訴渲染器需要陰影效果 renderer.setClearColor(0xffffff); document.body.appendChild(renderer.domElement); } var
camera; function initCamera() { camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000); camera.position.set(0, 40, 50); camera.lookAt(new THREE.Vector3(0,0,0)); } var scene; function initScene() { scene = new THREE.Scene(); } //初始化dat.GUI簡化試驗流程
var gui; function initGui() { //宣告一個儲存需求修改的相關資料的物件 gui = { }; var datGui = new dat.GUI(); //將設定屬性新增到gui當中,gui.add(物件,屬性,最小值,最大值) } var light; function initLight() { scene.add(new THREE.AmbientLight(0x444444)); light = new THREE.DirectionalLight(0xffffff
); light.position.set(200, 200, 100); //告訴平行光需要開啟陰影投射 light.castShadow = true; scene.add(light); } function initModel() { //輔助工具 var helper = new THREE.AxesHelper(50); scene.add(helper); var loader = new THREE.BabylonLoader(); loader.load("/lib/assets/models/babylon/skull.babylon", function (obj) { //獲取babylon的相關內容,重新定義模型的紋理 obj.traverse( function ( object ) { if ( object instanceof THREE.Mesh ) { object.material = new THREE.MeshPhongMaterial( { color: Math.random() * 0xffffff } ); //設定中心位置 object.position.set(0, 0, 0); } } ); //新增到場景當中 scene.add( obj ); }); } //初始化效能外掛 var stats; function initStats() { stats = new Stats(); document.body.appendChild(stats.dom); } //使用者互動外掛 滑鼠左鍵按住旋轉,右鍵按住平移,滾輪縮放 var controls; function initControls() { controls = new THREE.OrbitControls( camera, renderer.domElement ); // 如果使用animate方法時,將此函式刪除 //controls.addEventListener( 'change', render ); // 使動畫迴圈使用時阻尼或自轉 意思是否有慣性 controls.enableDamping = true; //動態阻尼係數 就是滑鼠拖拽旋轉靈敏度 //controls.dampingFactor = 0.25; //是否可以縮放 controls.enableZoom = true; //是否自動旋轉 controls.autoRotate = true; controls.autoRotateSpeed = 0.5; //設定相機距離原點的最遠距離 controls.minDistance = 1; //設定相機距離原點的最遠距離 controls.maxDistance = 200; //是否開啟右鍵拖拽 controls.enablePan = true; } function render() { renderer.render( scene, camera ); } //視窗變動觸發的函式 function onWindowResize() { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); render(); renderer.setSize( window.innerWidth, window.innerHeight ); } function animate() { //更新控制器 render(); //更新效能外掛 stats.update(); controls.update(); requestAnimationFrame(animate); } function draw() { //相容性判斷 if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); initGui(); initRender(); initScene(); initCamera(); initControls(); initLight(); initModel(); initStats(); animate(); window.onresize = onWindowResize; }