GLSharp.Util.Matrix4X4.MakeLookAt C# (CSharp) Method

MakeLookAt() public static method

public static MakeLookAt ( Vector3 eye, Vector3 center, Vector3 up ) : Matrix4X4
eye Vector3
center Vector3
up Vector3
return Matrix4X4
        public static Matrix4X4 MakeLookAt(Vector3 eye, Vector3 center, Vector3 up)
        {
            Matrix4X4 ret = new Matrix4X4(null);

            float eyex = eye.Elements[0],
                eyey = eye.Elements[1],
                eyez = eye.Elements[2],
                upx = up.Elements[0],
                upy = up.Elements[1],
                upz = up.Elements[2],
                centerx = center.Elements[0],
                centery = center.Elements[1],
                centerz = center.Elements[2];

            float z0, z1, z2, x0, x1, x2, y0, y1, y2, len;

            //vec3.direction(eye, center, z);
            z0 = eyex - center.Elements[0];
            z1 = eyey - center.Elements[1];
            z2 = eyez - center.Elements[2];

            // normalize (no check needed for 0 because of early return)
            len = 1 / Math.Sqrt(z0 * z0 + z1 * z1 + z2 * z2);
            z0 *= len;
            z1 *= len;
            z2 *= len;

            //vec3.normalize(vec3.cross(up, z, x));
            x0 = upy * z2 - upz * z1;
            x1 = upz * z0 - upx * z2;
            x2 = upx * z1 - upy * z0;
            len = Math.Sqrt(x0 * x0 + x1 * x1 + x2 * x2);

            if (len == 0) {
                x0 = 0;
                x1 = 0;
                x2 = 0;
            } else {
                len = 1 / len;
                x0 *= len;
                x1 *= len;
                x2 *= len;
            };

            //vec3.normalize(vec3.cross(z, x, y));
            y0 = z1 * x2 - z2 * x1;
            y1 = z2 * x0 - z0 * x2;
            y2 = z0 * x1 - z1 * x0;

            len = Math.Sqrt(y0 * y0 + y1 * y1 + y2 * y2);
            if (len == 0) {
                y0 = 0;
                y1 = 0;
                y2 = 0;
            } else {
                len = 1 / len;
                y0 *= len;
                y1 *= len;
                y2 *= len;
            }

            ret.Elements[0] = x0;
            ret.Elements[1] = y0;
            ret.Elements[2] = z0;
            ret.Elements[3] = 0;
            ret.Elements[4] = x1;
            ret.Elements[5] = y1;
            ret.Elements[6] = z1;
            ret.Elements[7] = 0;
            ret.Elements[8] = x2;
            ret.Elements[9] = y2;
            ret.Elements[10] = z2;
            ret.Elements[11] = 0;
            ret.Elements[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);
            ret.Elements[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);
            ret.Elements[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);
            ret.Elements[15] = 1;

            return ret;
        }