Adjust camera to focus at target
This commit is contained in:
@@ -12,9 +12,12 @@ camera_t camera_init(
|
|||||||
vec3_t pos, vec3_t target, double fov, uint32_t img_width,
|
vec3_t pos, vec3_t target, double fov, uint32_t img_width,
|
||||||
uint32_t img_height)
|
uint32_t img_height)
|
||||||
{
|
{
|
||||||
|
const vec3_t target_disp = vec3_sub(target, pos);
|
||||||
|
const double focal_len = vec3_len(target_disp);
|
||||||
|
|
||||||
const double fov_rad = M_PI * fov / 180.0;
|
const double fov_rad = M_PI * fov / 180.0;
|
||||||
const double aspect = (double)img_width / (double)img_height;
|
const double aspect = (double)img_width / (double)img_height;
|
||||||
const double viewport_height = tan(fov_rad / 2);
|
const double viewport_height = focal_len * tan(fov_rad / 2);
|
||||||
const double viewport_width = viewport_height * aspect;
|
const double viewport_width = viewport_height * aspect;
|
||||||
|
|
||||||
const vec3_t w_hat = vec3_unit(vec3_sub(target, pos));
|
const vec3_t w_hat = vec3_unit(vec3_sub(target, pos));
|
||||||
@@ -24,8 +27,7 @@ camera_t camera_init(
|
|||||||
const vec3_t u = vec3_scale(u_hat, viewport_width);
|
const vec3_t u = vec3_scale(u_hat, viewport_width);
|
||||||
const vec3_t v = vec3_scale(v_hat, -viewport_height);
|
const vec3_t v = vec3_scale(v_hat, -viewport_height);
|
||||||
|
|
||||||
const vec3_t topleft
|
const vec3_t topleft = vec3_sub(target, vec3_scale(vec3_add(u, v), 0.5));
|
||||||
= vec3_sub(vec3_add(pos, w_hat), vec3_scale(vec3_add(u, v), 0.5));
|
|
||||||
|
|
||||||
const vec3_t x_step = vec3_scale(u, 1.0 / (double)img_width);
|
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 y_step = vec3_scale(v, 1.0 / (double)img_height);
|
||||||
|
|||||||
Reference in New Issue
Block a user