#include #include /* ******************************************************** * * Ray Packet Functions * * ********************************************************/ void df_release_ray_packet(df_ray_packet *rays) { free(rays->simd_mem); free(rays->ray_uvs); memset(rays, 0, sizeof(*rays)); } /* ******************************************************** * * Perspective Camrea * * ********************************************************/ typedef struct { float focal_dist; float lens_radius; df_m4 screen_to_raster; df_m4 raster_to_screen; df_m4 raster_to_camera; } df_perspective_camera; static void pc_release(void *o) { df_perspective_camera *camera = o; } static df_ray_packet pc_build_ray_packet(void *o) { df_perspective_camera *camera = o; } df_camera_i df_create_perspective_camera(float image_width, float image_height, float raster_width, float raster_height) { df_perspective_camera *camera = malloc(sizeof(*camera)); camera->screen_to_raster = df_scale(raster_width, raster_height, 1.f); camera->screen_to_raster = df_mul_m4(camera->screen_to_raster, df_scale(1.f / image_width, -1.f / image_height, 1.f)); camera->screen_to_raster = df_mul_m4(camera->screen_to_raster, df_translate(0.f, -image_height, 0.f)); camera->raster_to_screen = df_inverse_transform(camera->screen_to_raster); df_camera_i iface = {.release = pc_release, .build_ray_packet = pc_build_ray_packet, .o = camera}; return iface; }