The LookAt function is definitely off. Was doing my Matrix lib today based on GLScene and tested this on the way. Lib itself works perfectly when i rotate object with mouse with my functions. It's when i set camera with this lookAt it doesn't go to right place.

[pascal]// This doesn't work
cam:=MatrixLookAt(Vector(0,0,-3),Vector(0,0,0),Vector(0,1,0));

// This works
cam:=NewMatrix;
TranslateMatrix(cam,Vector(0,0,-3));[/pascal]

Edit: I also used your matrix multiplication function so it means they are read same way GLScene made 1 line for each 16 array elements, 2 x for loop is more compact.