javascript - Three.js OrbitControls 补间动画到目标对象的正面(正面)
问题描述
当我单击一个按钮时,我希望 OrbitControls(相机)使用 tween.js 平滑地位于对象(正面)的前面。
我使用这段代码但是发现在controls.target
远离目标物体改变和平移之后,我只能放大一点,而我放大之后,我不能平移。
有没有另一种方式来看待一个物体?谢谢!
var from = {
x: controls.target.x,
y: controls.target.y,
z: controls.target.z
};
var to = {
x: object.getWorldPosition().x,
y: object.getWorldPosition().y,
z: object.getWorldPosition().z
};
var tween = new TWEEN.Tween(from)
.to(to, 1000)
.easing(TWEEN.Easing.Quadratic.InOut) // | TWEEN.Easing.Linear.None
.onUpdate(function () {
controls.target.set( this.x, this.y, this.z )
})
.onComplete(function () {
controls.target.set( this.x, this.y, this.z )
})
.start();
解决方案
请尝试以下操作:当动画开始时,禁用控件controls.enabled = false;
以防止对动画产生任何干扰。接下来,onComplete()
像这样实现一个补间的回调:
.onComplete(function() {
controls.enabled = true;
camera.getWorldDirection( lookDirection );
controls.target.copy( camera.position ).add( lookDirection.multiplyScalar( 10 ) );
})
这个想法是再次启用控件,计算视图的当前外观方向,然后为控件设置新目标。如果您需要为每个摄像机位置设置一个准确的目标点,您还可以设置一个预定义的目标。该值10
以世界单位为单位,并确定目标应沿观察方向的距离。
推荐阅读
- r - 加宽数据框并插入缺失的列
- json - 10 次中有 1 次出现错误 json.decoder.JSONDecodeError: Expecting ','
- python - 列表中的 XGBoost 功能重要性
- angular - 如何将角度单元测试写入组件外部的函数
- python - 如何在 VSCode 中获取一般 pyd 文件和 confluent_kafka 的参数提示?
- node.js - Flutter + FCM:java.lang.IllegalArgumentException:不支持的值:Bundle[mParcelledData.dataSize=100]
- c# - 为什么我可以从计算机堆栈c#的末尾访问数据
- python - 为什么这个 django url 不在 Mac 上运行?
- r - 使用 openxlsx 包的工作表链接问题
- node.js - 无法从猫鼬模型中获得文档“查找”承诺