某些功能在ammo.js中不起作用,尽管BulletPhysics文档显示它们应该

时间:2015-07-04 16:37:38

标签: javascript bulletphysics ammo.js

澄清一下 - ammo.js是使用emscripten

的Bullet Physics的一个端口

好的,所以我只是制作了这个快速而又脏的脚本来移动带有按键的块,这很好并且正常工作。但是,当我想要旋转块铬时不断告诉我

  

TypeError:quat1.setEulerZYX不是函数

     

在drawScene

即使Bullet Documentation明确指出setEulerZYX是一个函数

try {
    var px = parseFloat(tempCamz); // Turns strings into integers
    var py = parseFloat((tempCamy * -1));
    var pz = parseFloat(tempCamx);
    var quat1 = new Ammo.btQuaternion();
    quat1.setEulerZYX(0.5,0,0);
    var blockShape = new Ammo.btBoxShape(new Ammo.btVector3(1/4, 1, 1/2));
    var mass = 1;
    var blockTransform = new Ammo.btTransform();
    blockTransform.setIdentity();
    blockTransform.setRotation(quat1);
    blockTransform.setOrigin(new Ammo.btVector3(px, py, pz));
    var localInertia = new Ammo.btVector3(0, 0, 0);
    var myMotionState = new Ammo.btDefaultMotionState(blockTransform);
    blockShape.calculateLocalInertia(mass,localInertia);
    var rbInfo = new Ammo.btRigidBodyConstructionInfo(mass, myMotionState, blockShape, localInertia);
    var body = new Ammo.btRigidBody(rbInfo);
    body.setLinearVelocity(origvel);

    instances[i].physObj = body;
    dynamicsWorld.addRigidBody(instances[i].physObj);

    } catch(err) {
    console.log(err);
}

1 个答案:

答案 0 :(得分:0)

ammo.js没有公开所有Bullet实体的完整API:

  

并非所有类都被公开,因为只有ammo.idl中描述的内容被包装。

- 来自README

有关可用方法的列表,请参阅ammo.idl

您可以更新ammo.idl并添加所需方法的定义,然后使用自定义构建或尝试将更改设置为upstreem,有关说明,请参阅this issue

我自己没有足够的耐心来构建这个东西(主要是因为Debian存储库中的默认emscripten包的问题),但让emscripten工作它应该很容易在{{1中包含setEulerZYX()的声明定义,更新后可能看起来像这样(但我没有尝试,所以它可能或可能不起作用):

btQuaternion