2017-10-18 101 views
0

我有一個cannon.js中的物體,它已經應用了四元數旋轉。我想將它沿着一個向量相對於它的局部旋轉移動100個單位。在Cannon.js中定位一個物體相對於局部旋轉

let body = new CANNON.Body({ mass: 0 }); 
body.quaternion.setFromAxisAngle(new CANNON.Vec3(0,0,1),(2*Math.PI)/6); 
body.position.set(0,0,100); //this is wrong 

使用body.position.set(x, y, z);相對於世界,而不是局部旋轉的身體動作。我想我需要在應用四元數之後添加一個向量,但cannon.js的文檔並不是特別有用,所以我還沒有能夠解決如何去做。

+0

我不熟悉cannon.js,但我認爲你必須使用'transformAllPoints'。見[**這**](https://github.com/schteppe/cannon.js/issues/58) – Rabbid76

回答

1

使用Quaternion#vmult方法旋轉矢量,並將Vec3#add添加到位置結果。

let body = new CANNON.Body({ mass: 0 }); 
body.quaternion.setFromAxisAngle(new CANNON.Vec3(0,0,1),(2*Math.PI)/6); 
let relativeVector = new CANNON.Vec3(0,0,100); 

// Use quaternion to rotate the relative vector, store result in same vector 
body.quaternion.vmult(relativeVector, relativeVector); 

// Add position and relative vector, store in body.position 
body.position.vadd(relativeVector, body.position);