Move camera initialisation into seperate module

This commit is contained in:
Camden Dixie O'Brien
2025-09-21 12:17:32 +01:00
parent a345835703
commit d6f583c260
4 changed files with 57 additions and 28 deletions

26
src/camera.c Normal file
View File

@@ -0,0 +1,26 @@
#include "camera.h"
camera_t camera_init(
vec3_t pos, double focal_len, double viewport_height, uint32_t img_width,
uint32_t img_height)
{
const double aspect = (double)img_width / (double)img_height;
const double viewport_width = viewport_height * aspect;
const vec3_t viewport_disp = { 0, 0, focal_len };
const vec3_t u = { viewport_width, 0, 0 };
const vec3_t v = { 0, -viewport_height, 0 };
const vec3_t topleft = vec3_sub(
vec3_sub(pos, viewport_disp), vec3_scale(vec3_add(u, v), 0.5));
const vec3_t x_step = vec3_scale(u, 1.0 / (double)img_width);
const vec3_t y_step = vec3_scale(v, 1.0 / (double)img_height);
const vec3_t pix_origin
= vec3_add(topleft, vec3_scale(vec3_add(x_step, y_step), 0.5));
return (camera_t) {
.pos = pos,
.pix_origin = pix_origin,
.x_step = x_step,
.y_step = y_step,
};
}