Three.js利用orbit controls插件(軌道控制)控制模型交互動作詳解
前言
本文主要給大家介紹了關(guān)于Three.js利用orbit controls插件(軌道控制)控制模型交互動作的相關(guān)內(nèi)容,這個效果相對于第八節(jié)的軌跡球插件使用上感覺要好,雖然軌跡球插件可以來回的滾動,但是容易分辨不清楚上下左右的關(guān)系,容易混亂,適合調(diào)試,而軌道控制插件orbit則適合客戶使用,還不會產(chǎn)生混亂效果。下面講一下使用。
(1)首先引入插件,文件地址在官方案例的examples/js/controls/OrbitControls.js。
(2)然后實(shí)例化函數(shù),把相機(jī)和渲染器的dom傳入,并設(shè)置相關(guān)設(shè)置。
//用戶交互插件 鼠標(biāo)左鍵按住旋轉(zhuǎn),右鍵按住平移,滾輪縮放
var controls;
function initControls() {
controls = new THREE.OrbitControls( camera, renderer.domElement );
// 如果使用animate方法時,將此函數(shù)刪除
//controls.addEventListener( 'change', render );
// 使動畫循環(huán)使用時阻尼或自轉(zhuǎn) 意思是否有慣性
controls.enableDamping = true;
//動態(tài)阻尼系數(shù) 就是鼠標(biāo)拖拽旋轉(zhuǎn)靈敏度
//controls.dampingFactor = 0.25;
//是否可以縮放
controls.enableZoom = true;
//是否自動旋轉(zhuǎn)
controls.autoRotate = true;
//設(shè)置相機(jī)距離原點(diǎn)的最遠(yuǎn)距離
controls.minDistance = 200;
//設(shè)置相機(jī)距離原點(diǎn)的最遠(yuǎn)距離
controls.maxDistance = 600;
//是否開啟右鍵拖拽
controls.enablePan = true;
}
(3)最后,在animate函數(shù)內(nèi)調(diào)用orbit的update()更新。
function animate() {
//更新控制器
controls.update();
render();
//更新性能插件
stats.update();
requestAnimationFrame(animate);
}
就實(shí)現(xiàn)了相關(guān)效果。
下面是全部案例代碼:
<!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);
}
//用戶交互插件 鼠標(biāo)左鍵按住旋轉(zhuǎn),右鍵按住平移,滾輪縮放
var controls;
function initControls() {
controls = new THREE.OrbitControls( camera, renderer.domElement );
// 如果使用animate方法時,將此函數(shù)刪除
//controls.addEventListener( 'change', render );
// 使動畫循環(huán)使用時阻尼或自轉(zhuǎn) 意思是否有慣性
controls.enableDamping = true;
//動態(tài)阻尼系數(shù) 就是鼠標(biāo)拖拽旋轉(zhuǎn)靈敏度
//controls.dampingFactor = 0.25;
//是否可以縮放
controls.enableZoom = true;
//是否自動旋轉(zhuǎn)
controls.autoRotate = true;
//設(shè)置相機(jī)距離原點(diǎn)的最遠(yuǎn)距離
controls.minDistance = 200;
//設(shè)置相機(jī)距離原點(diǎn)的最遠(yuǎn)距離
controls.maxDistance = 600;
//是否開啟右鍵拖拽
controls.enablePan = true;
}
function render() {
renderer.render( scene, camera );
}
//窗口變動觸發(fā)的函數(shù)
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>
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
JavaScript 實(shí)現(xiàn)網(wǎng)頁打印處理
JavaScript 實(shí)現(xiàn)網(wǎng)頁打印處理...2007-04-04
JS 組件系列之 bootstrap treegrid 組件封裝過程
最近產(chǎn)品需要設(shè)計一套相對完整的組織架構(gòu)的解決方案,由于組織架構(gòu)涉及到層級關(guān)系,在表格里面展示層級關(guān)系,自然就要用到所謂的treegrid。下面小編通過本文給大家分享JS 組件系列之 bootstrap treegrid 組件的封裝過程,需要的朋友可以參考下2017-04-04
一種新的javascript對象創(chuàng)建方式Object.create()
這篇文章主要介紹了一種新的javascript對象創(chuàng)建方式Object.create(),感興趣的小伙伴們可以參考一下2015-12-12
純CSS3代碼實(shí)現(xiàn)滑動開關(guān)效果
CSS33D炫酷左右滑動開關(guān)按鈕是一款非??岬腃SS3 3D開關(guān)按鈕,點(diǎn)擊按鈕可以左右滑動,就像開關(guān)打開閉合一樣的效果,通過本篇文章給大家介紹純CSS3代碼實(shí)現(xiàn)滑動開關(guān)效果,需要的朋友可以參考下2015-08-08
js 將圖片連接轉(zhuǎn)換成base64格式的簡單實(shí)例
下面小編就為大家?guī)硪黄猨s 將圖片連接轉(zhuǎn)換成base64格式的簡單實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08

