Javascript 如何抵消模型与three/js和oimo.js的冲突

Javascript 如何抵消模型与three/js和oimo.js的冲突,javascript,typescript,three.js,physics-engine,Javascript,Typescript,Three.js,Physics Engine,我正在尝试使用three.js导入一个模型,然后在Oimo中创建一个实体来表示它,从而创建一个具有对象的collsion 我的问题来自模型的中心,与对象的中心不相关。因此,当我使边界框变大时,脚处的碰撞是不正确的。有没有一种简单的方法可以通过代码甚至编辑模型来实现这一点(建模不是我的专业领域) 好吧,我设法弄明白了。所以它只是半高,这个值嵌套在成员形状的深处 protected render(): void { requestAnimationFrame( this.re

我正在尝试使用three.js导入一个模型,然后在Oimo中创建一个实体来表示它,从而创建一个具有对象的collsion

我的问题来自模型的中心,与对象的中心不相关。因此,当我使边界框变大时,脚处的碰撞是不正确的。有没有一种简单的方法可以通过代码甚至编辑模型来实现这一点(建模不是我的专业领域)


好吧,我设法弄明白了。所以它只是半高,这个值嵌套在成员形状的深处

    protected render(): void {
        requestAnimationFrame( this.render.bind( this ) );

        let deltaTime = this.clock.getDelta();
        this.world.step();

        this.physicsBodies.forEach( ( data: { body: RigidBody, object: GameModel, cube?: Mesh }, index ) => {

            data.object.update( deltaTime );

            if ( data.object.isDirty ) {
                data.body.position.copy( data.object.getDisplayObject().position );
                data.object.isDirty = false;
            }
            data.object.getDisplayObject().position.copy( data.body.getPosition() );
            data.object.getDisplayObject().position.y -= data.body.shapes.halfHeight;

            let bodyQuaternion = data.body.getQuaternion();
            data.object.getDisplayObject().quaternion.set(
                bodyQuaternion.x,
                bodyQuaternion.y,
                bodyQuaternion.z,
                bodyQuaternion.w
            );
            data.object.updateMixer( deltaTime );
        } );

        this.nonPhysicsBodies.forEach( ( model: GameModel ) => {
            model.updateMixer( deltaTime );
        } );

        this.renderer.render( this.scene, this.camera );

    }
所以每次渲染我都需要从主体位置减去半高

data.object.getDisplayObject().position.y-=data.body.shapes.halfHeight

var animate = function () {
    requestAnimationFrame( animate );

    let deltaTime = clock.getDelta();

    if ( mixer2 ) {
        mixer2.forEach( mix => {
            mix.update( deltaTime );
        } );
    }
    if ( world ) {
        world.step();
        bodies.forEach( ( body, index ) => {
            models[ index ].position.copy( body.getPosition() );
            models[ index ].quaternion.copy( body.getQuaternion() );

            cubes[ index ].position.copy( body.getPosition() );
            cubes[ index ].quaternion.copy( body.getQuaternion() );
        } )
    }
    renderer.render( scene, camera );
};

animate();
    protected render(): void {
        requestAnimationFrame( this.render.bind( this ) );

        let deltaTime = this.clock.getDelta();
        this.world.step();

        this.physicsBodies.forEach( ( data: { body: RigidBody, object: GameModel, cube?: Mesh }, index ) => {

            data.object.update( deltaTime );

            if ( data.object.isDirty ) {
                data.body.position.copy( data.object.getDisplayObject().position );
                data.object.isDirty = false;
            }
            data.object.getDisplayObject().position.copy( data.body.getPosition() );
            data.object.getDisplayObject().position.y -= data.body.shapes.halfHeight;

            let bodyQuaternion = data.body.getQuaternion();
            data.object.getDisplayObject().quaternion.set(
                bodyQuaternion.x,
                bodyQuaternion.y,
                bodyQuaternion.z,
                bodyQuaternion.w
            );
            data.object.updateMixer( deltaTime );
        } );

        this.nonPhysicsBodies.forEach( ( model: GameModel ) => {
            model.updateMixer( deltaTime );
        } );

        this.renderer.render( this.scene, this.camera );

    }