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

首頁(yè) > 開(kāi)發(fā) > JS > 正文

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

2024-05-06 16:39:59
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

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

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

只需要和案例里面一樣設(shè)置相關(guān)的屬性,并在實(shí)例化的時(shí)候講相機(jī)傳入。就可以實(shí)現(xiàn)交互效果。

可以實(shí)現(xiàn)的效果:

  • 鼠標(biāo)按住左鍵可以旋轉(zhuǎn)模型
  • 鼠標(biāo)按住右鍵拖拽可以移動(dòng)模型
  • 鼠標(biāo)滾輪可以縮放模型

案例代碼:

<!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);  }   //用戶交互插件 鼠標(biāo)左鍵按住旋轉(zhuǎn),右鍵按住平移,滾輪縮放  var controls;  function initControls() {   controls = new THREE.TrackballControls( camera );   //旋轉(zhuǎn)速度   controls.rotateSpeed = 5;   //變焦速度   controls.zoomSpeed = 3;   //平移速度   controls.panSpeed = 0.8;   //是否不變焦   controls.noZoom = false;   //是否不平移   controls.noPan = false;   //是否開(kāi)啟移動(dòng)慣性   controls.staticMoving = false;   //動(dòng)態(tài)阻尼系數(shù) 就是靈敏度   controls.dynamicDampingFactor = 0.3;   //未知,占時(shí)先保留   //controls.keys = [ 65, 83, 68 ];   controls.addEventListener( 'change', render );  }    function render() {   renderer.render( scene, camera );  }   //窗口變動(dòng)觸發(fā)的函數(shù)  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> 

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 齐河县| 手机| 黄大仙区| 寿光市| 新闻| 枞阳县| 友谊县| 淅川县| 新疆| 湖南省| 大埔区| 三河市| 梨树县| 安陆市| 女性| 永济市| 涿州市| 阳原县| 南涧| 宣化县| 临夏市| 建宁县| 青海省| 云和县| 深圳市| 且末县| 新竹县| 博客| 松潘县| 镇沅| 怀仁县| 安乡县| 岑溪市| 平昌县| 茂名市| 平谷区| 沭阳县| 富顺县| 栾城县| 灌南县| 微博|