Three.js使用OrbitControls后修改相機旋轉(zhuǎn)方向無效解決辦法
1.問題復(fù)現(xiàn)
在項目中添加了OrbitControls控制器來控制相機的旋轉(zhuǎn)和平移,但是需要修改初始的相機角度,于是我把相機的角度進行修改,如下:
const camera = new THREE.PerspectiveCamera(75, viewport.offsetWidth / viewport.offsetHeight, 0.01, 20); camera.position.set(0,1,7); //修改相機初始角度 camera.rotation.set(0,-Math.PI/2,0); const controls = new OrbitControls(camera, renderer.domElement); controls.update();
運行項目后發(fā)現(xiàn)相機的位置并沒有發(fā)生變化。原因是相機旋轉(zhuǎn)和移動被OrbitControls控制器托管了。
2.解決方法
方法1.于是我嘗試創(chuàng)建一個組,將相機加入組里,通過改變組的旋轉(zhuǎn)角度從而改變相機的初始角度,如下:
const cameraRigY = new THREE.Group();
scene.add(cameraRigY);
const camera = new THREE.PerspectiveCamera(75, viewport.offsetWidth / viewport.offsetHeight, 0.01, 20);
camera.position.set(0,1,7);
//相機加入組里
cameraRigY.add(camera);
//修改整體相機Y軸旋轉(zhuǎn)
cameraRigY.rotation.set(0,Math.PI/2,0);
const controls = new OrbitControls(camera, renderer.domElement);
controls.update();進過測試,相機的初始角度修改成功了。
方法2:也可以設(shè)置焦點:OrbitControls控制器上有target用來設(shè)置焦點。相機角度和位置要同步修改才行。
controls.target = new THREE.Vector3(0, 0, 0);//控制焦點
3.重置相機
在相機旋轉(zhuǎn)操作了之后,想重置到原來的狀態(tài),發(fā)現(xiàn)上訴方法也無效了。而OrbitControls控制器提供了兩個方法來實現(xiàn):
/**
* Save the current state of the controls. This can later be
* recovered with .reset.
*/
saveState(): void;
/**
* Reset the controls to their state from either the last time
* the .saveState was called, or the initial state.
*/
reset(): void;
先調(diào)用saveState()方法保存當(dāng)前的相機狀態(tài),然后使用reset()方法重置到之前保存的狀態(tài)即可。
總結(jié)
到此這篇關(guān)于Three.js使用OrbitControls后修改相機旋轉(zhuǎn)方向無效解決辦法的文章就介紹到這了,更多相關(guān)Three.js修改相機旋轉(zhuǎn)方向無效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
教學(xué)演示-UBB,剪貼板,textRange及其他
教學(xué)演示-UBB,剪貼板,textRange及其他...2006-07-07
javascript常用的數(shù)組過濾和查找方法總結(jié)
這篇文章主要介紹了javascript常用的數(shù)組過濾和查找方法的相關(guān)資料,這些方法各有特點,適用于不同的數(shù)據(jù)處理場景,大家可以根據(jù)需求選擇不同的方法,需要的朋友可以參考下2024-12-12
利用jsPDF實現(xiàn)將圖片轉(zhuǎn)為pdf
這篇文章主要為大家詳細(xì)介紹了如何利用jsPDF實現(xiàn)將圖片轉(zhuǎn)為pdf的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-08-08
JS中的回調(diào)函數(shù)(callback)講解
回調(diào)函數(shù)是一段可執(zhí)行的代碼段,它作為一個參數(shù)傳遞給其他的代碼,其作用是在需要的時候方便調(diào)用這段(回調(diào)函數(shù))代碼,這篇文章主要介紹了JS中的?回調(diào)函數(shù)(callback),需要的朋友可以參考下2022-12-12
js 轉(zhuǎn)json格式的字符串為對象或數(shù)組(前后臺)的方法
下面小編就為大家?guī)硪黄猨s 轉(zhuǎn)json格式的字符串為對象或數(shù)組(前后臺)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11

