public static Matrix LookAtMatrix(this Vector3 o, Vector3 p, Vector3 u)
{
var d = Vector3.Normalize(o - p);
var s = Vector3.Normalize(Vector3.Cross(Vector3.Normalize(u), d));
var v = Vector3.Normalize(Vector3.Cross(d, s));
return(SlimDxExtension.ToMatrix(
v.X, v.Y, v.Z, 0,
d.X, d.Y, d.Z, 0,
s.X, s.Y, s.Z, 0,
o.X, o.Y, o.Z, 1));
}