2015-07-04 4 views
0

Для уточнения - ammo.js является портом Bullet Physics с помощью emscriptenНекоторые функции не работают в ammo.js, несмотря на BulletPhysics документации показывая, что они должны

Хорошо, так что я только что сделал это быстрый и грязный сценарий для перемещения блок с нажатиями клавиш, это нормально и работает. Однако, когда я хочу, чтобы повернуть блок хром продолжает говорить мне, что

TypeError: quat1.setEulerZYX is not a function

at 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); 
} 

ответ

0

ammo.js не предоставляет полный API всех пули лица:

Not all classes are exposed, as only what is described in ammo.idl is wrapped.

- от README

Для получения списка доступных методов см. ammo.idl.

Вы можете обновить ammo.idl и добавить определения для методов, которые вам нужны, а затем использовать пользовательскую сборку или попытаться внести изменения в upstreem, см. this issue для получения некоторых инструкций.

я не был достаточно терпелив, чтобы построить эту вещь сам (в основном, из-за проблемы с emscripten по умолчанию пакета из репозитория Debian), но, emscripten работать она должна быть достаточно легко включить объявление для setEulerZYX() в btQuaternion определения, что после обновления может выглядеть так (но я не пытался, поэтому он может работать или не работать):

interface btQuaternion { 
    void btQuaternion(float x, float y, float z, float w); 
    void setValue(float x, float y, float z, float w); 
    void setEulerZYX(float yaw, float pitch, float roll); 
}; 
btQuaternion implements btQuadWord;