Hey Ero,

Good catch, look like we missed them when documenting.

While we work on doing so the platform team provided some descriptions below which will hopefully help:

```
// reference: http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToMatrix/index.htm
matrixFromAxisAngle(axis, angle) {
var c = Math.cos(angle);
var s = Math.sin(angle);
var t = 1.0 - c;
var m00 = c + axis[0]*axis[0]*t;
var m11 = c + axis[1]*axis[1]*t;
var m22 = c + axis[2]*axis[2]*t;
var tmp1 = axis[0]*axis[1]*t;
var tmp2 = axis[2]*s;
var m10 = tmp1 + tmp2;
var m01 = tmp1 - tmp2;
tmp1 = axis[0]*axis[2]*t;
tmp2 = axis[1]*s;
var m20 = tmp1 - tmp2;
var m02 = tmp1 + tmp2;
tmp1 = axis[1]*axis[2]*t;
tmp2 = axis[0]*s;
var m21 = tmp1 + tmp2;
var m12 = tmp1 - tmp2;
return [m00, m01, m02,
m10, m11, m12,
m20, m21, m22];
}
normalize(vec) {
return Z.Vec3.scalarMultiply(forwardVec, 1.0 / Z.Vec3.magnitude(forwardVec));
}
cross(vecA, vecB) {
var x = vecA[1] * vecB[2] - vecB[1] * vecA[2];
var y = vecA[2] * vecB[0] - vecB[2] * vecA[0];
var z = vecA[0] * vecB[1] - vecB[0] * vecA[1];
return [x, y, z]
}
lookAt(forwardVec, targetVec) {
// normalize
var forward = normalize(forwardVec);
var target = normalize(targetVec);
// compute the rotation axis
var axis = cross(forward, target);
// compute the angle
var cosTheta = Z.Vec3.dot(forward, target);
var angle = Math.acos(cosTheta);
// compute the rotation matrix
var rotM = matrixFromAxisAngle(axis, angle);
// get the Euler angels
return Z.Mat.anglesFromRotationMatrix(rotM);
}
// let's say, the object's position is objPos with the defined forward vector as objForward, and the look at target's postion is targetPos, then call
var angles = lookAt(objForward, Z.Vec3.subtract(targetPos, objPos));
```

Cheers,

Mark