Exemple #1
0
static void
quaternion_angle_vec3_to_from (mutest_spec_t *spec)
{
  graphene_quaternion_t q1, q2;
  graphene_vec3_t axis;
  float angle;

  graphene_quaternion_init_from_angle_vec3 (&q1, 45.f, graphene_vec3_y_axis ());
  graphene_quaternion_init_from_quaternion (&q2, &q1);
  graphene_quaternion_to_angle_vec3 (&q2, &angle, &axis);

  mutest_expect ("roundtrip init_from_angle_vec3 and to_angle_vec3 yields the same angle",
                 mutest_float_value (angle),
                 mutest_to_be_close_to, 45.0, 0.0001,
                 NULL);
  mutest_expect ("roundtrip init_from_angle_vec3 and to_angle_vec3 yields the same axis",
                 mutest_bool_value (graphene_vec3_near (&axis, graphene_vec3_y_axis (), 0.0001f)),
                 mutest_to_be_true,
                 NULL);
}
static void
gst_gl_transformation_build_mvp (GstGLTransformation * transformation)
{
  graphene_point3d_t translation_vector =
      GRAPHENE_POINT3D_INIT (transformation->xtranslation * 2.0 *
      transformation->aspect,
      transformation->ytranslation * 2.0,
      transformation->ztranslation * 2.0);

  graphene_matrix_t model_matrix;
  graphene_matrix_t projection_matrix;
  graphene_matrix_t view_matrix;
  graphene_matrix_t vp_matrix;

  graphene_vec3_t eye;
  graphene_vec3_t center;
  graphene_vec3_t up;

  graphene_vec3_init (&eye, 0.f, 0.f, 1.f);
  graphene_vec3_init (&center, 0.f, 0.f, 0.f);
  graphene_vec3_init (&up, 0.f, 1.f, 0.f);

  graphene_matrix_init_scale (&model_matrix,
      transformation->xscale, transformation->yscale, 1.0f);

  graphene_matrix_rotate (&model_matrix,
      transformation->xrotation, graphene_vec3_x_axis ());
  graphene_matrix_rotate (&model_matrix,
      transformation->yrotation, graphene_vec3_y_axis ());
  graphene_matrix_rotate (&model_matrix,
      transformation->zrotation, graphene_vec3_z_axis ());

  graphene_matrix_translate (&model_matrix, &translation_vector);

  if (transformation->ortho) {
    graphene_matrix_init_ortho (&projection_matrix,
        -transformation->aspect, transformation->aspect,
        -1, 1, transformation->znear, transformation->zfar);
  } else {
    graphene_matrix_init_perspective (&projection_matrix,
        transformation->fov,
        transformation->aspect, transformation->znear, transformation->zfar);
  }

  graphene_matrix_init_look_at (&view_matrix, &eye, &center, &up);

  graphene_matrix_multiply (&view_matrix, &projection_matrix, &vp_matrix);
  graphene_matrix_multiply (&model_matrix, &vp_matrix,
      &transformation->mvp_matrix);
}