Three.js OrbitControls将补间动画过渡到目标对象的脸部(正面)

时间:2019-05-08 10:37:50

标签: javascript animation three.js tween.js orbit-controls

当我单击按钮时,我希望通过使用tween.js将OrbitControls(相机)平稳地置于对象(正面)的前面。

我使用此代码,但发现更改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();

1 个答案:

答案 0 :(得分:1)

请尝试以下操作:动画开始时,请通过InitialContext ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup(DATA_SOURCE_NAME); Map<String, Object> properties = new HashMap<>(); properties.put(PersistenceUnitProperties.NON_JTA_DATASOURCE, ds); entityManagerFactory = Persistence.createEntityManagerFactory( PERSISTENCE_UNIT_NAME, properties); 禁用控件,以免干扰动画。接下来,像这样实现您的一个补间的grecaptcha.ready(function() { grecaptcha.execute('sitekey', {actienter code hereon: 'loginpage'}).then(function(token) { /* Move Google Badge to your Div ID */ jQuery('.grecaptcha-badge').appendTo("#g-badge-newlocation"); }); }); 回调:

controls.enabled = false;

这个想法是再次启用控件,计算视图的当前外观方向,然后为控件设置新的目标。如果每个摄像机位置都需要精确的目标位置,则还可以设置预定义的目标。值onComplete()以世界单位为单位,并确定目标应沿着视线方向走多远。

更新的小提琴:Refer to these answers