static void mzlook( const double eye[3], const double target[3], const double up[3] ) { { double R[9] = {0}; aa_tf_rotmat_mzlook(eye,target,up,R); assert( aa_tf_isrotmat(R) ); } double g_E_cam[7]; double cam_E_g[7]; aa_tf_qutr_mzlook(eye,target,up,g_E_cam); aa_tf_qutr_conj(g_E_cam, cam_E_g); { double x[3]; aa_tf_qutr_tf(g_E_cam, aa_tf_vec_ident, x); aveq("mzlook eye 0", 3, eye, x, 1e-6 ); aa_tf_qutr_tf(cam_E_g, eye, x); aveq("mzlook eye 1", 3, aa_tf_vec_ident, x, 1e-6 ); } { double ell[3]; for(size_t i=0; i<3; i++) ell[i] = -(target[i] - eye[i]); aa_tf_vnormalize(ell); double z[3]; aa_tf_qrot(cam_E_g, ell, z); aveq("mzlook rot", 3, z, aa_tf_vec_z, 1e-6 ); } }
int main(int argc, char *argv[]) { (void)argc; (void)argv; SDL_Window* window = NULL; SDL_GLContext gContext = NULL; aa_sdl_gl_window( "SDL Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE, &window, &gContext); printf("OpenGL Version: %s\n", glGetString(GL_VERSION)); Init(); struct aa_gl_globals *globals = aa_gl_globals_create(); // global camera { double world_E_camera_home[7] = AA_TF_QUTR_IDENT_INITIALIZER; double eye[3] = {1,1,0.5}; double target[3] = {0,0,0}; double up[3] = {0,0,1}; aa_tf_qutr_mzlook( eye, target, up, world_E_camera_home ); aa_gl_globals_set_camera_home( globals, world_E_camera_home ); aa_gl_globals_home_camera( globals ); } // global lighting { double v_light[3] = {.5,1,5}; double ambient[3] = {.1,.1,.1}; aa_gl_globals_set_light_position( globals, v_light ); aa_gl_globals_set_ambient(globals, ambient); } aa_sdl_display_loop( window, globals, display, globals ); SDL_GL_DeleteContext(gContext); SDL_DestroyWindow( window ); SDL_Quit(); return 0; }