void default_cam_mgr_rotate(default_cam_mgr_t * state, double *q, uint32_t animate_ms) { zarray_t * fp = zarray_create(sizeof(matd_t*)); matd_t * eye = matd_create_data(3,1,state->eye1); zarray_add(fp, &eye); matd_t *lookat = matd_create_data(3,1,state->lookat1); zarray_add(fp, &lookat); matd_t *up = matd_create_data(3,1,state->up1); zarray_add(fp, &up); matd_t * toEye = matd_subtract(eye, lookat); zarray_add(fp, &toEye); matd_t * nextToEye = matd_create(3,1); zarray_add(fp, &nextToEye); vx_util_quat_rotate(q, toEye->data, nextToEye->data); matd_t * nextEye = matd_add(lookat, nextToEye); zarray_add(fp, &nextEye); matd_t * nextUp = matd_copy(up); zarray_add(fp, &nextUp); vx_util_quat_rotate(q, up->data, nextUp->data); // copy back results memcpy(state->eye1, nextEye->data, sizeof(double)*3); memcpy(state->up1, nextUp->data, sizeof(double)*3); state->mtime1 = vx_util_mtime() + animate_ms; // Disable any prior fit command default_destroy_fit(state); // cleanup zarray_vmap(fp, matd_destroy); zarray_destroy(fp); default_cam_mgr_follow_disable(state); }
void default_cam_mgr_lookat(default_cam_mgr_t * state, double *eye, double *lookat, double *up, int set_default, uint32_t animate_ms) { internal_lookat(state, eye, lookat, up, animate_ms); // Disable any prior fit command default_destroy_fit(state); default_cam_mgr_follow_disable(state); if (set_default) save_target_pos(state); }
void default_cam_mgr_fit2D(default_cam_mgr_t * state, double *xy0, double *xy1, int set_default, uint32_t animate_ms) { fit_t * fit = calloc(1,sizeof(fit_t)); fit->mtime = vx_util_mtime() + animate_ms; fit->xy0[0] = xy0[0]; fit->xy0[1] = xy0[1]; fit->xy1[0] = xy1[0]; fit->xy1[1] = xy1[1]; state->fit = fit; if (set_default) save_target_pos(state); default_cam_mgr_follow_disable(state); }
void default_cam_mgr_set_cam_pos(default_cam_mgr_t * state, vx_camera_pos_t *cp, int set_default, uint32_t animate_ms) { memcpy(state->eye1, cp->eye, 3*sizeof(double)); memcpy(state->lookat1, cp->lookat, 3*sizeof(double)); memcpy(state->up1, cp->up, 3*sizeof(double)); state->perspectiveness1 = cp->perspectiveness; state->perspective_fovy_degrees = cp->perspective_fovy_degrees; state->zclip_near = cp->zclip_near; state->zclip_far = cp->zclip_far; //JS: if we don't animate, lets just not change this. state->mtime1 = vx_util_mtime() + animate_ms; default_cam_mgr_follow_disable(state); if (set_default) save_target_pos(state); }
void process_camera_codes(state_t * state, vx_code_input_stream_t * cins) { int layer_id = cins->read_uint32(cins); int op = cins->read_uint32(cins); layer_info_t * linfo = NULL; zhash_get(state->layer_info_map, &layer_id, &linfo); if (linfo == NULL) return; uint64_t mtime; vx_camera_pos_t * cur_pos; if (verbose) printf("Op %d remaining %d\n",op, vx_code_input_stream_available(cins)); double eyedf[3]; double lookatdf[3]; double updf[3]; double xy0[2]; double xy1[2]; switch(op) { case OP_DEFAULTS: default_cam_mgr_defaults(linfo->cam_mgr, UI_ANIMATE_MS); break; case OP_PROJ_PERSPECTIVE: case OP_PROJ_ORTHO: cur_pos = default_cam_mgr_get_cam_target(linfo->cam_mgr,&mtime); cur_pos->perspectiveness = op == OP_PROJ_ORTHO ? 0.0f : 1.0f; default_cam_mgr_set_cam_pos(linfo->cam_mgr, cur_pos, 0, 0); vx_camera_pos_destroy(cur_pos); break; case OP_LOOKAT: eyedf[0] = cins->read_float(cins); eyedf[1] = cins->read_float(cins); eyedf[2] = cins->read_float(cins); lookatdf[0] = cins->read_float(cins); lookatdf[1] = cins->read_float(cins); lookatdf[2] = cins->read_float(cins); updf[0] = cins->read_float(cins); updf[1] = cins->read_float(cins); updf[2] = cins->read_float(cins); mtime = cins->read_uint32(cins); // animate ms ignored! XXX default_cam_mgr_lookat(linfo->cam_mgr, eyedf, lookatdf, updf, cins->read_uint8(cins), mtime); break; case OP_FIT2D: xy0[0] = cins->read_float(cins); xy0[1] = cins->read_float(cins); xy1[0] = cins->read_float(cins); xy1[1] = cins->read_float(cins); mtime = cins->read_uint32(cins); // animate ms ignored! XXX default_cam_mgr_fit2D(linfo->cam_mgr, xy0, xy1, cins->read_uint8(cins), mtime); break; case OP_FOLLOW_MODE_DISABLE: default_cam_mgr_follow_disable(linfo->cam_mgr); break; case OP_INTERFACE_MODE: { float mode = cins->read_float(cins); default_cam_mgr_set_interface_mode(linfo->cam_mgr, mode); } } if (op == OP_FOLLOW_MODE) { double pos3[3]; double quat4[4]; pos3[0] = cins->read_double(cins); pos3[1] = cins->read_double(cins); pos3[2] = cins->read_double(cins); quat4[0] = cins->read_double(cins); quat4[1] = cins->read_double(cins); quat4[2] = cins->read_double(cins); quat4[3] = cins->read_double(cins); int followYaw = cins->read_uint32(cins); uint32_t animate_ms = cins->read_uint32(cins); default_cam_mgr_follow(linfo->cam_mgr, pos3, quat4, followYaw, animate_ms); } }