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;
}
Exemplo n.º 2
0
float lengthvec4(vec4 v) {
    return sqrt(dotvec4(v, v));
}