I'd like a little help here calculating the view matrix for OpenGL based on the lookat type function:
vec3f eye = {0, 0, 0};
vec3f center = {10, 2, 21};
vec3f up = {0, 1, 0};
mat4* vm;
mat4LookAt(vm, &eye, ¢er, &up);
mat4print("lookat",vm);
Matrix output:
lookat [ -0.902861 -0.036833 -0.428353 0.000000 ] [ 0.000000 0.996324 -0.085671 0.000000 ] [ 0.429934 -0.077349 -0.899541 0.000000 ] [ 0.000000 0.000000 -0.000000 1.000000 ]
The code that I used to create this matrix:
vec3f x = {1, 0, 0};
vec3f y = {0, 1, 0};
vec3f z = {0, 0, 1};
vec3fsub(&z, eye, center);
vec3fprint("z unnorm ",&z);
vec3fnorm(&z, &z);
vec3fprint("z norm ",&z);
vec3fcross(&x, &y, &z);
vec3fprint("x = y cros z",&x);
vec3fcross(&y, &z, &x);
vec3fprint("y = z cros x",&y);
vec3fprint("x unnorm ",&x);
vec3fnorm(&x, &x);
vec3fprint("x norm ",&x);
vec3fprint("y unnorm ",&y);
vec3fnorm(&y, &y);
vec3fprint("y norm ",&y);
double xx, yy, zz, x1, y1, z1;
xx = vec3fdotr(&x, eye);
yy = vec3fdotr(&y, eye);
zz = vec3fdotr(&z, eye);
x1 = vec3fdotr(eye, &x);
y1 = vec3fdotr(eye, &y);
z1 = vec3fdotr(eye, &z);
printf("x:%f\ty:%f\tz:%f\t\n",xx, yy, zz);
printf("x:%f\ty:%f\tz:%f\t\n",x1, y1, z1);
double data[] = { (&x)->p[0], (&y)->p[0], (&z)->p[0], 0,
(&x)->p[1], (&y)->p[1], (&z)->p[1], 0,
(&x)->p[2], (&y)->p[2], (&z)->p[2], 0,
xx, yy, zz, 1 };
copyMatrix(out, data);
Is this the proper way to calculate the lookat matrix that will take my models from object to view space?