3d-下摄像机自动漫游-利用tweenjs

36次阅读

共计 1929 个字符,预计需要花费 5 分钟才能阅读完成。

function createTween (params) {

    new TWEEN.Tween(params.object)
        .to(params.to, params.duration)
        .onComplete(() => onComplete())
        .onUpdate(params.onUpdate)
        .easing(params.easing)
        .start()}
function onComplete() {console.log("onComplete")
}
var tweenParams = {

    targetTweenDuration: 2500,
    posTweenDuration: 2500,
    upTweenDuration: 2500,

    targetTweenEasing: {
        id: TWEEN.Easing.Quadratic.Out,
            name: 'Linear'
    },
    posTweenEasing: {
        id: TWEEN.Easing.Quadratic.Out,
        name: 'Linear'
    },
    upTweenEasing: {
        id: TWEEN.Easing.Quadratic.Out,
        name: 'Linear'
    },

    configManager: null,
    showLoader: true

}

function tweenCameraTo (state, immediate) {

    immediate = false;


    const targetEnd = new THREE.Vector3(state.viewport.target[0],
        state.viewport.target[1],
        state.viewport.target[2])

    const posEnd = new THREE.Vector3(state.viewport.eye[0],
        state.viewport.eye[1],
        state.viewport.eye[2])

    const upEnd = new THREE.Vector3(state.viewport.up[0],
        state.viewport.up[1],
        state.viewport.up[2])

    const nav = viewer.navigation

    const target = new THREE.Vector3().copy(nav.getTarget())

    const pos = new THREE.Vector3().copy(nav.getPosition())

    const up = new THREE.Vector3().copy(nav.getCameraUpVector())


    const targetTween = createTween({
        easing: tweenParams.targetTweenEasing.id,
        onUpdate: (v) => {nav.setTarget(v)
        },
        duration: immediate ? 0 : tweenParams.targetTweenDuration,
            object: target,
            to: targetEnd
    })

    const posTween = this.createTween({
        easing: tweenParams.posTweenEasing.id,
        onUpdate: (v) => {nav.setPosition(v)
        },
        duration: immediate ? 0 :tweenParams.posTweenDuration,
            object: pos,
            to: posEnd
    })

    const upTween = this.createTween({
        easing: tweenParams.upTweenEasing.id,
        onUpdate: (v) => {nav.setCameraUpVector(v)
        },
        duration: immediate ? 0 : tweenParams.upTweenDuration,
            object: up,
            to: upEnd
    })

    Promise.all([
        targetTween,
        posTween,
        upTween]).then(() => {
            animate = false
            console.log(11111)
        })


    }

// function animate(time) {//     requestAnimationFrame(animate);
//     TWEEN.update(time);
//     console.log(1)
// }
// requestAnimationFrame(animate);


function runAnimation (start) {if (start || animate) {

        this.animId = window.requestAnimationFrame(runAnimation)

        Tween.update()}
}

正文完
 0