I played with your LookAt yesterday and it seems to work, but there's still a little bug I'm going to track down. Something is calculated wrong, because the object slightly rotates with the camera and when the camera angle is high enough, the triangle disappears.

Clearly, it's a problem with matrices. I suppose the function which returns the direction vector from a matrix is faulty. Here is the code:
[code=delphi]
{ .: Mat4ApplyToVector :. }
function Mat4ApplyToVector(const M: TBrainMatrix; const V: TBrainVector): TBrainVector; inline;
begin
Result.X := V.X * M.M[0, 0] + V.Y * M.M[1, 0] + V.Z * M.M[2, 0] + M.M[3, 0];
Result.Y := V.X * M.M[0, 1] + V.Y * M.M[1, 1] + V.Z * M.M[2, 1] + M.M[3, 1];
Result.Z := V.X * M.M[0, 2] + V.Y * M.M[1, 2] + V.Z * M.M[2, 2] + M.M[3, 2];
end;

{ .: Mat4GetDirectionVector :. }
function Mat4GetDirectionVector(const M: TBrainMatrix): TBrainVector; inline;
var
M1: TBrainMatrix;
E: TBrainEuler;
begin
Result := Vec3(0.0, 0.0, -1.0);

E := Mat4GetRotationEuler(M);
M1 := Mat4CreateRotationEuler(E);
Result := Mat4ApplyToVector(M1, Result);
Result := Vec3Normalize(Result);
end;
[/code]

Or maybe the problem is in the way I use them? I'm not sure. Anyway, if someone can tell me whether these two functions are correct, I'll be glad.

I think I'm very close to solving the problem. Of course once I'm done with that, I'll post a complete source code here.