# [SOLVED] Manual Bone Rotations

Hello everyone ! I’m porting an application developed in Godot Engine that receives a set of rotations and displays a character that executes them on the screen:

In GodotEngine the code that rotates the joints correctly is this:

``````func set_bone_rot(bone, ang):

var b = skeleton.find_bone(bone)

var bone_rest_inv = skeleton.get_bone_rest(b).affine_inverse()
var bone_rest = skeleton.get_bone_rest(b)

var newpose = bone_rest_inv*bone_rest
newpose= newpose.rotated(Vector3(1.0, 0.0, 0.0),ang.x)
newpose = newpose.rotated(Vector3(0.0, 1.0, 0.0),ang.z)
newpose = newpose.rotated(Vector3(0.0, 0.0, 1.0),ang.y)
``````

My code in threejs is like this at this moment:

``````function setBoneRotation(boneName, ang){
var bone = scene.getObjectByName(boneName);

var rotation = new THREE.Quaternion();

var quat = new THREE.Quaternion();

var vx = new THREE.Vector3( 1, 0, 0 );
var vy = new THREE.Vector3( 0, 1, 0 );
var vz = new THREE.Vector3( 0, 0, 1 );

quat.setFromAxisAngle( vx, ang.x );
rotation.multiply( quat );
quat.setFromAxisAngle( vy, ang.y );
rotation.multiply( quat );
quat.setFromAxisAngle( vz, ang.z );
rotation.multiply( quat );

bone.setRotationFromQuaternion(rotation);
}
``````

I notice that the rotations in the three.js resemble the correct articulation but somehow it is distorted. Could someone tell me if there is any necessary transformation that I am not doing?

Sample video with godotEngine https://youtu.be/7LUikSU8hhI
Sample video with three.js https://youtu.be/vTs_6ozCWi8

Thanks Guys !

Enzo

Ok I got it … its a rotation order issue … here is the final code …

``````function setBoneRotation(boneName, ang){
var bone = scene.getObjectByName(boneName);
bone.rotation.order="YZX";
bone.rotation.z=ang.z;
bone.rotation.y=ang.y;
bone.rotation.x=ang.x;
}
``````
1 Like