three.js中兩個(gè)點(diǎn)之間平滑切換相機(jī)位置的解決方法

在three.js場(chǎng)景中,讓相機(jī)從當(dāng)前的位置平滑的切換到新的位置,類似于下面的效果。

camera.gif

在整個(gè)動(dòng)畫(huà)的開(kāi)始和結(jié)束的階段需要做一些平滑的處理。
我這里使用的是tween.js。
場(chǎng)景我使用的orbitControls控制的,所以在相機(jī)動(dòng)畫(huà)主要控制兩個(gè)點(diǎn):
1是相機(jī)的位置,2是orbitControls的target屬性(這個(gè)屬性相當(dāng)于相機(jī)控制的中心點(diǎn))

// oldP  相機(jī)原來(lái)的位置
// oldT  target原來(lái)的位置
// newP  相機(jī)新的位置
// newT  target新的位置
// callBack  動(dòng)畫(huà)結(jié)束時(shí)的回調(diào)函數(shù)
function animateCamera(oldP, oldT, newP, newT, callBack){
        var tween = new TWEEN.Tween({
            x1: oldP.x, // 相機(jī)x
            y1: oldP.y, // 相機(jī)y
            z1: oldP.z, // 相機(jī)z
            x2: oldT.x, // 控制點(diǎn)的中心點(diǎn)x
            y2: oldT.y, // 控制點(diǎn)的中心點(diǎn)y
            z2: oldT.z  // 控制點(diǎn)的中心點(diǎn)z
        });
        tween.to({
            x1: newP.x,
            y1: newP.y,
            z1: newP.z,
            x2: newT.x,
            y2: newT.y,
            z2: newT.z
        },1000);
        tween.onUpdate(function(object){
            camera.position.x = object.x1;
            camera.position.y = object.y1;
            camera.position.z = object.z1;
            controls.target.x = object.x2;
            controls.target.y = object.y2;
            controls.target.z = object.z2;
            controls.update();
        })
        tween.onComplete(function(){
            controls.enabled = true;
            callBack&&callBack()
        })
        tween.easing(TWEEN.Easing.Cubic.InOut);
        tween.start();
    }

別忘了在requestAnimationFrame中調(diào)用TWEEN.update();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 深入響應(yīng)式 追蹤變化: 把普通js對(duì)象傳給Vue實(shí)例的data選項(xiàng),Vue將使用Object.defineProp...
    冥冥2017閱讀 4,952評(píng)論 6 16
  • tweenjs 是使用 JavaScript 中的一個(gè)簡(jiǎn)單的補(bǔ)間動(dòng)畫(huà)庫(kù),支持?jǐn)?shù)字、對(duì)象的屬性和 CSS 樣式屬性的...
    bowen_wu閱讀 23,122評(píng)論 0 11
  • 1 .Community service is an important component of educati...
    何禿子閱讀 630評(píng)論 0 0
  • 1.魚(yú),肉,蛋煮熟,5個(gè)糖包子.水酒 2.蘋(píng)果,香蕉,橘子各3個(gè)
    yinzheng1334011閱讀 160評(píng)論 0 0
  • 早上5點(diǎn)半起床,邊站樁邊寫(xiě)日記,把落下的日記全部補(bǔ)完了,感覺(jué)心里舒坦多了。 重復(fù)聽(tīng)書(shū)《誰(shuí)動(dòng)了我的奶酪》,感恩自...
    Rfen閱讀 307評(píng)論 0 0

友情鏈接更多精彩內(nèi)容