void rut_graphable_fully_transform_point (RutObject *graphable, RutCamera *camera, float *x, float *y, float *z) { CoglMatrix modelview; const CoglMatrix *projection; const float *viewport; float point[3] = { *x, *y, *z }; rut_graphable_get_modelview (graphable, camera, &modelview); projection = rut_camera_get_projection (camera); viewport = rut_camera_get_viewport (camera); rut_util_fully_transform_vertices (&modelview, projection, viewport, point, point, 1); *x = point[0]; *y = point[1]; *z = point[2]; }
bool map_window_coords_to_overlay_coord (RutCamera *camera, /* 2d ui camera */ RutObject *overlay, /* camera-view overlay */ float *x, float *y) { CoglMatrix transform; CoglMatrix inverse_transform; rut_graphable_get_modelview (overlay, camera, &transform); if (!cogl_matrix_get_inverse (&transform, &inverse_transform)) return FALSE; rut_camera_unproject_coord (camera, &transform, &inverse_transform, 0, /* object_coord_z */ x, y); return TRUE; }
bool map_window_coords_to_overlay_coord(rut_object_t *camera, /* 2d ui camera */ rut_object_t *overlay, /* camera-view overlay */ float *x, float *y) { c_matrix_t transform; c_matrix_t inverse_transform; rut_graphable_get_modelview(overlay, camera, &transform); if (!c_matrix_get_inverse(&transform, &inverse_transform)) return false; rut_camera_unproject_coord(camera, &transform, &inverse_transform, 0, /* object_coord_z */ x, y); return true; }