为了澄清- ammo.js是一个使用emscripten的弹物理端口
好的,所以我刚刚制作了一个快速而肮脏的脚本来移动一个带按键的块,这很好,也很有效。然而,当我想旋转的时候,铬块一直告诉我
TypeError: quat1.setEulerZYX不是函数 在drawScene
尽管子弹文件清楚地声明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);
}发布于 2015-07-04 20:00:34
ammo.js并不公开所有项目实体的完整API:
并不是所有的类都公开了,因为只有在ammo.idl中描述的内容才会被包装。
-来自自述文件
有关可用方法的列表,请参见ammo.idl。
您可以更新ammo.idl并为您需要的方法添加定义,然后使用自定义构建或尝试将您的更改转化为upstreem,有关一些说明,请参阅本期。
我没有足够的耐心自己构建这个东西(主要是因为Debian存储库中默认的emscripten包存在问题),但是让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;https://stackoverflow.com/questions/31222918
复制相似问题