Move camera initialisation into seperate module
This commit is contained in:
26
src/camera.c
Normal file
26
src/camera.c
Normal 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,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user