2014-03-28 43 views
1

我做了一個簡單的場景和移動攝像頭引用http://www.96methods.com/2011/12/three-js-moving-the-camera/three.js所移動相機從載體到另一個

var timer = new Date().getTime() * 0.0005; 
camera.position.x = Math.floor(Math.cos(timer) * 200); 
camera.position.z = Math.floor(Math.sin(timer) * 200); 

但是,它只圈的相機,我發現很難從一個移動矢量到另一個具有指定速度的矢量。 例如,攝像機點是(0,0,0),我想移動到(100,0,100),攝像機將面對該點並移動到該點。 任何方式來實現它的代碼或我只是錯過任何官方功能?謝謝。

回答

2

我想你會發現很多在這裏使用與tween.js

new TWEEN.Tween(camera.position) 
    .to({ 
    x: position.x, 
    y: position.y, 
    z: position.z}, 2000) 
    .easing(TWEEN.Easing.Sinusoidal.EaseInOut) 
    .start(); 

這個例子將攝像機移動到由X,Y,Z定義的位置,並採取2000毫秒(2秒)。包含大量的過渡效果,這將使您的動畫看起來非常流暢。對答案,除了我發現

0

由於它可以通過編碼

camera.lookAt(new THREE.Vector3(moveVectors[currentIndex][0] * ((time - moveBaseTime+1)/100000) + camera.position.x * (1-((time - moveBaseTime+1)/100000)), moveVectors[currentIndex][1] * ((time - moveBaseTime+1)/100000) + camera.position.y * (1-((time - moveBaseTime+1)/100000)) , moveVectors[currentIndex][2] * ((time - moveBaseTime+1)/100000) + camera.position.z * (1-((time - moveBaseTime+1)/100000)))); 
camera.position.x = moveVectors[currentIndex][0] * ((time - moveBaseTime)/100000) + camera.position.x * (1-((time - moveBaseTime)/100000)); 
camera.position.y = moveVectors[currentIndex][1] * ((time - moveBaseTime)/100000) + camera.position.y * (1-((time - moveBaseTime)/100000)); 
camera.position.z = moveVectors[currentIndex][2] * ((time - moveBaseTime)/100000) + camera.position.z * (1-((time - moveBaseTime)/100000)); 

凡理論設置定時器,通過將計時器的時間內解決將達到1。所以,公式應該: CURRENT_POSITION *(1-timer)+ TARGET_POSITION * timer;當定時器從0增加到1時,當前位置*(1定時器)將變爲零,並且目標位置*定時器將成爲目標位置。

相關問題