Files
SimpleRayTracing/source/Rendering/Camera.c
Misaki 9cc420693c Refactor camera system to use quaternion rotations
Added quaternion and vector structures from the cglm library for handling 3D rotations and directions.
Added a new function `euler_to_quat` to convert Euler angles to a quaternion representation.
Changed the `camera_t` structure to replace separate forward, up, and right vectors with a single rotation quaternion.
Changed the `camera_create` function to accept a rotation quaternion instead of separate direction vectors.
Changed the `scene_init` function to initialize the camera with a default rotation quaternion.
Changed the `ensure_camera_aspect_ratio` function to maintain the camera's rotation quaternion.
Changed the `screen_render_pixel`, `scene_render_tile`, and `scene_render` functions to compute camera coordinates based on the quaternion rotation.
2025-04-22 17:26:04 +09:00

18 lines
519 B
C

#include "Rendering/Camera.h"
camera_t camera_create(vec3s position, versors rotation, float focal_length, float size_x, float aspect_ratio)
{
camera_t camera =
{
.position = position,
.rotation = rotation,
.focal_length = focal_length,
.size_x = size_x,
.size_y = size_x / aspect_ratio,
.fov_x = 2.0f * (float)atan(size_x / (2.0f * focal_length)),
.fov_y = 2.0f * (float)atan(size_x / (2.0f * focal_length * aspect_ratio)),
};
return camera;
}