gpt4 book ai didi

three.js - 如何使用三个 JS 制作 Camera.lookAt 动画

转载 作者:行者123 更新时间:2023-12-02 17:28:16 24 4
gpt4 key购买 nike

我有一个场景,它渲染一个带有多个对象的板。单击其中一个对象并通过使用对象拾取,我可以获得该对象并为摄像机位置设置动画以使其位于该对象的“俯视” View 中。然后使用camera.lookAt方法我可以强制相机直接看着对象。

在 onUpdate 方法中调用camera.lookAt 时,我注意到动画开始时有一个快速跳转,因为它最初需要旋转很远的距离来查看所选对象。相比之下,随后对camera.lookAt的每次调用都很小,而且动画效果很好。

// Position the camera to fit
var tween = new TWEEN.Tween(camera.position).to({
x: selectedObject.position.x,
y: selectedObject.position.y,
z: 1
}).easing(TWEEN.Easing.Quadratic.InOut).onUpdate(function() {
camera.lookAt(selectedObject.position);
}).onComplete(function() {
camera.lookAt(selectedObject.position);
}).start();

有什么方法可以为该方法设置动画吗?还是我必须手动转换相机的矩阵值才能查看我选择的对象?

这是一个例子。它使用WebGLRenderer,因此请使用合适的浏览器。

http://jsfiddle.net/fungus1487/SMLwa/

感谢您的帮助。

最佳答案

您可以做的一件事是调整相机位置和相机目标(您必须定义)。

var tween = new TWEEN.Tween( camera.position )
.to( {
x: selectedObject.position.x,
y: selectedObject.position.y,
z: 1
} )
.easing( TWEEN.Easing.Linear.None ).onUpdate( function () {

camera.lookAt( camera.target );

} )
.onComplete( function () {

camera.lookAt( selectedObject.position );

} )
.start();

var tween = new TWEEN.Tween( camera.target )
.to( {
x: selectedObject.position.x,
y: selectedObject.position.y,
z: 0
} )
.easing( TWEEN.Easing.Linear.None )
.onUpdate( function () {

} )
.onComplete( function () {

camera.lookAt( selectedObject.position );

} )
.start();

这有点棘手,因为补间需要完全同时运行,而它们不...这就是在第二个补间中调用camera.lookAt() 的原因。

关于three.js - 如何使用三个 JS 制作 Camera.lookAt 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com