Matrix3D already have it, but it seems that I can't get it work as I
would expect it to work :).
So if someone happen to struggle with same thing.
private function lookat(vPos:Vector3D, vLookAt:Vector3D,
vWorldUp:Vector3D):Matrix3D
{
var vRight:Vector3D = new Vector3D(0, 0, 0);
var vUp:Vector3D = new Vector3D(0, 0, 0);
var resMat:Vector.<Number> = new Vector.<Number>(16);
var vDir:Vector3D = vPos.subtract(vLookAt);
vDir.normalize();
vRight = vWorldUp.crossProduct(vDir);
vUp = vDir.crossProduct(vRight);
resMat[0] = vRight.x; resMat[1] = vRight.z;
resMat[2] = vRight.y;
resMat[3] = 0;
resMat[4] = vUp.x; resMat[5] = vUp.z;
resMat[6] = vUp.y;
resMat[7] = 0;
resMat[8] = vDir.x; resMat[9] = vDir.z;
resMat[10] = vDir.y;
resMat[11] = 0;
resMat[12] = 0; resMat[13] = 0;
resMat[14] = 0; resMat[15] =
1;
var mMatrix:Matrix3D = new Matrix3D();
mMatrix.rawData = resMat;
return mMatrix;
}
Return Matrix3D without position data. So you need to append whatever
position data you like afterwards.