0
在three.js中使用TWEEN函數時,我注意到它專用於補間對象。是否有可能使用three.js軌道控制軌道?
我可以補間相機的位置,但我想補間軌道控制。 這將在攝像機在臺車上時仿效目標。
目前的攝像機位置進行補間,此代碼:
var xTarget=0;
var yTarget=0;
var zTarget=0;
function setupCamTween(xTarget,yTarget,zTarget){
var update = function(){
camera.position.x = current.x;
camera.position.y = current.y;
camera.position.z = current.z;
}
TWEEN.removeAll();
var current = { x: myCameraX, y : myCameraY, z : myCameraZ };
var target = { x : xTarget, y : yTarget, z : zTarget};
console.log("moving cam");
var camTween = new TWEEN.Tween(current).to(target, 1000);
camTween.easing(TWEEN.Easing.Quadratic.InOut);
camTween.start();
camTween.onUpdate(function(){
camera.position.x=current.x;
camera.position.y=current.y;
camera.position.z=current.z;
});
}
setupCamTween(0,900,4000);
然後我用這個代碼來改變目標的軌道上。
controls.target.set(0,myCameraY,2000);
controls.update();
因此,當我這樣做時,相機補間到的位置,然後它跳轉到目標控制點。
我想擺脫設置軌道控制時的跳躍。
所以我創建了一個功能如下補間的軌道控制:
function orbitCam(){
var update = function(){
controls.target.x=current.x;
controls.target.y=current.y;
controls.target.z=current.z;
}
//TWEEN.removeAll();
var current = {x: myCameraX, y: myCameraY, z: myCameraZ };
var target = {x: 0, y: 200, z: 0};
var orbitTween = new TWEEN.Tween(current).to(target,2000);
orbitTween.easing(TWEEN.Easing.Quadratic.InOut);
orbitTween.onUpdate(function(){
controls.target.set.x=current.x;
controls.target.set.y=current.y;
controls.target.set.z=current.z;
});
}
當我調用此函數,它什麼都不做。 所以我想弄清楚是否可以補間軌道控制的目標設置。 任何意見表示讚賞。
我在動畫函數中調用控件更新。
function animate() {
requestAnimationFrame(animate);
TWEEN.update();
controls.update();
}
我設法讓下面的代碼工作。但不幸的是,在目標設置完成後,我失去了所有的軌道控制。
var xTarget=0;
var yTarget=0;
var zTarget=0;
var tweenDuration=0;
function setupCamTween(xTarget,yTarget,zTarget,tweenDuration){
var update = function(){
camera.position.x = current_position.x;
camera.position.y = current_position.y;
camera.position.z = current_position.z;
controls.target.x = current_target.x;
controls.target.y = current_target.y;
controls.target.z = current_target.z;
}
//TWEEN.removeAll();
var current_position = { x: myCameraX, y : myCameraY, z : myCameraZ };
var target = { x : xTarget, y : yTarget, z : zTarget};
var current_target = { x: myCameraX, y : myCameraY, z : myCameraZ };
var new_target = {x : xTarget, y : yTarget, z : zTarget};
console.log("moving cam");
var camTween = new TWEEN.Tween(current_position).to(target, tweenDuration);
camTween.easing(TWEEN.Easing.Quadratic.InOut);
camTween.start();
var targetTween = new TWEEN.Tween(current_target).to(new_target, tweenDuration);
targetTween.easing(TWEEN.Easing.Quadratic.InOut);
targetTween.start();
camTween.onUpdate(function(){
camera.position.x=current_position.x;
camera.position.y=current_position.y;
camera.position.z=current_position.z;
});
targetTween.onUpdate(function(){
controls.target.x = controls.object.position.x;
controls.target.y = controls.object.position.y;
controls.target.z = controls.object.position.z;
controls.target.x = current_target.x;
controls.target.y = current_target.y;
controls.target.z = current_target.z;
});
}
我覺得你的疼痛(如我在嘗試在[jsfiddle.net/gpolyn/bpo7t7f6](https://jsfiddle.net/gpolyn/bpo7t7f6類似的東西)。)你叫'controls.update '在你的新代碼中?你不需要嗎? – gallygator
是的,我。我更新了我的問題以表明這一點。我想知道我是否全力以赴。也許一個簡單的相機旋轉將做或目標,但我不能讓它工作。 – Migpics
我對此也感興趣。然而,我期望解決問題的方法可能與解決目標重新設定問題有關,以便更順利。 – gallygator