您好,欢迎访问一九零五行业门户网

Three.js利用orbit controls插件控制模型实例

本文主要给大家介绍了关于three.js利用orbit controls插件(轨道控制)控制模型交互动作的相关内容,这个效果相对于第八节的轨迹球插件使用上感觉要好,虽然轨迹球插件可以来回的滚动,但是容易分辨不清楚上下左右的关系,容易混乱,适合调试,而轨道控制插件orbit则适合客户使用,还不会产生混乱效果。下面讲一下使用。
(1)首先引入插件,文件地址在官方案例的examples/js/controls/orbitcontrols.js。
(2)然后实例化函数,把相机和渲染器的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.mindistance = 200;   //设置相机距离原点的最远距离   controls.maxdistance = 600;   //是否开启右键拖拽   controls.enablepan = true;   }
(3)最后,在animate函数内调用orbit的update()更新。
function animate() {   //更新控制器   controls.update();   render();     //更新性能插件   stats.update();   requestanimationframe(animate);   }
就实现了相关效果。
下面是全部案例代码:
<!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/orbitcontrols.js"></script>  <script src="examples/js/libs/stats.min.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 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.mindistance = 200;   //设置相机距离原点的最远距离   controls.maxdistance = 600;   //是否开启右键拖拽   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() {   //更新控制器   controls.update();   render();     //更新性能插件   stats.update();   requestanimationframe(animate);   }     function draw() {   initrender();   initscene();   initcamera();   initlight();   initmodel();   initcontrols();   initstats();     animate();   window.onresize = onwindowresize;   }  </script>  </html>
以上就是three.js利用orbit controls插件控制模型实例的详细内容。
其它类似信息

推荐信息