Esempio n. 1
0
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);

}
Esempio n. 2
0
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);

}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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);
    }
}