视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2020-11-27 22:29:09 责编:小采
文档


前言

之前我们已经简单的给大家介绍了关于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> 

    总结

    下载本文
    显示全文
    专题