国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Three.js如何用軌跡球插件(trackball)增加對模型的交互功能詳解

2019-11-19 15:18:56
字體:
來源:轉載
供稿:網友

前言

之前我們已經簡單的給大家介紹了關于three.js入門的一些案例,下面本文將詳細介紹關于Three.js如何用軌跡球插件(trackball)增加對模型的交互功能,下面話不多說了,來一起看看詳細的介紹吧。

這是three.js的一個組件,需要額外的引入文件,文件的地址是在官方下載的案例examples/js/controls/TrackballControls.js。

只需要和案例里面一樣設置相關的屬性,并在實例化的時候講相機傳入。就可以實現交互效果。

可以實現的效果:

  • 鼠標按住左鍵可以旋轉模型
  • 鼠標按住右鍵拖拽可以移動模型
  • 鼠標滾輪可以縮放模型

案例代碼:

<!DOCTYPE html> <html lang="en"> <head>  <meta charset="UTF-8">  <title>Title</title>  <style type="text/css">  html, body {   margin: 0;   height: 100%;  }   canvas {   display: block;  }   </style> </head> <body onload="draw();">  </body> <script src="build/three.js"></script> <script src="examples/js/controls/TrackballControls.js"></script> <script>  var renderer;  function initRender() {  renderer = new THREE.WebGLRenderer({antialias:true});  renderer.setSize(window.innerWidth, window.innerHeight);  document.body.appendChild(renderer.domElement);  }   var camera;  function initCamera() {  camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 10000);  camera.position.set(0, 0, 400);  }   var scene;  function initScene() {  scene = new THREE.Scene();  }   var light;  function initLight() {  scene.add(new THREE.AmbientLight(0x404040));   light = new THREE.DirectionalLight(0xffffff);  light.position.set(1,1,1);  scene.add(light);  }   function initModel() {  var map = new THREE.TextureLoader().load("examples/textures/UV_Grid_Sm.jpg");  var material = new THREE.MeshLambertMaterial({map:map});   var cube = new THREE.Mesh(new THREE.BoxGeometry(100, 200, 100, 1, 1, 1), material);  scene.add(cube);  }   //用戶交互插件 鼠標左鍵按住旋轉,右鍵按住平移,滾輪縮放  var controls;  function initControls() {  controls = new THREE.TrackballControls( camera );  //旋轉速度  controls.rotateSpeed = 5;  //變焦速度  controls.zoomSpeed = 3;  //平移速度  controls.panSpeed = 0.8;  //是否不變焦  controls.noZoom = false;  //是否不平移  controls.noPan = false;  //是否開啟移動慣性  controls.staticMoving = false;  //動態阻尼系數 就是靈敏度  controls.dynamicDampingFactor = 0.3;  //未知,占時先保留  //controls.keys = [ 65, 83, 68 ];  controls.addEventListener( 'change', render );  }   function render() {  renderer.render( scene, camera );  }   //窗口變動觸發的函數  function onWindowResize() {   camera.aspect = window.innerWidth / window.innerHeight;  camera.updateProjectionMatrix();  controls.handleResize();  render();  renderer.setSize( window.innerWidth, window.innerHeight );   }   function animate() {  //更新控制器  controls.update();  render();  requestAnimationFrame(animate);  }   function draw() {  initRender();  initScene();  initCamera();  initLight();  initModel();  initControls();   animate();  window.onresize = onWindowResize;  } </script> </html> 

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南华县| 项城市| 石首市| 汤阴县| 九寨沟县| 宁强县| 贵德县| 大埔县| 通山县| 格尔木市| 伊吾县| 于都县| 丰县| 莆田市| 无极县| 土默特左旗| 建水县| 仁寿县| 富锦市| 铜梁县| 黄浦区| 临猗县| 枝江市| 英德市| 全州县| 资中县| 宕昌县| 韶山市| 水富县| 密山市| 刚察县| 胶州市| 迁安市| 华坪县| 龙游县| 厦门市| 延吉市| 同德县| 祁东县| 龙游县| 德化县|