效果展示:
鼠標控制
一、鼠標控制 -?軌道控制器(OrbitControls)
? ? ? ? 1. 從nodeModules中導入OrbitControls,OrbitControls 是一個附加組件,必須顯式導入
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
注意:從官網上粘貼的引入路徑有時候是不對的,手動從自己的node_modules中找一下OrbitControls.js文件的路徑,核實準確才有效。
????????2. 通過new OrbitControls實例化一個controls,OrbitControls有兩個參數,分別是camera(相機),domElement(用于事件監聽的HTML元素,即當下繪制在界面的canvas元素)
const controls ?= new OrbitControls(camera, renderer.domElement)
????????3. 在動畫循環requestAnimationFrame中實時更新,不斷加載位置的變化 【方案一】
一般多用【方案一】
function animate() {
? ? ? ? requestAnimationFrame( animate );
? ? ? ? controls.update();
? ? ? ? renderer.render( scene, camera );
}
requestAnimationFrame( animate );
注意:如果此處沒有用動畫requestAnimationFrame,僅僅只是new OrbitControls(camera, renderer.domElement),則鼠標控制的效果是看不到的,即使鼠標在移動的過程中相機camera的位置是在不斷變化的,但這個位置并沒實時渲染到canvas上。
? ? ? ? 4. 如果不使用requestAnimationFrame進行渲染相機位置的變化,還可以通過監聽Orbitcontrol的change事件進行渲染,【方案二】
controls.addEventListener('change',() => {
? ? ? ? renderer.render( scene, camera );
})
????????5. 慣性enableDamping(默認為false),鼠標控制相機旋轉時,false情況下鼠標抬起的一瞬間,旋轉效果就立即停止;設置為true時,必須配合動畫requestAnimationFrame,在動畫中通過update方法更新控制器,即當鼠標抬起,物體的旋轉會有個緩沖過程,慢慢停下(更符合物體運動規律)
const controls = new OrbitControls(camera, renderer.domElement)
controls.enableDamping = true
controls.addEventListener('change',() => {controls.update();renderer.render( scene, camera );
})