mat4 lookAt(vec4 pos, vec4 dir) { vec4 f = dir; normalizevec4(&f); vec4 u = {{0, 1, 0, 0}}; vec4 s = crossvec4(f, u); normalizevec4(&s); u = crossvec4(s, f); mat4 out = IDENTITY_MATRIX; out.m[0] = s.x; out.m[4] = s.y; out.m[8] = s.z; out.m[1] = u.x; out.m[5] = u.y; out.m[9] = u.z; out.m[2] = -f.x; out.m[6] = -f.y; out.m[10] = -f.z; out.m[12] = -dotvec4(s, pos); out.m[13] = -dotvec4(u, pos); out.m[14] = dotvec4(f, pos); return out; }
float lengthvec4(vec4 v) { return sqrt(dotvec4(v, v)); }