Skip to content
modkitv0.2

math/camera.h

#include <modkit/math/camera.h>20 functions · 1 structs · 1 enums · 2 typedefs

Camera abstraction for 2D ortho and 3D perspective.

Handles backend-specific projection matrix generation based on renderer capabilities (homogeneousDepth for OpenGL vs D3D/Vulkan/Metal). Uses right-hand coordinate system with Y-up, -Z forward.

Functions

mk_camera_2dfunction

mk_camera mk_camera_2d(float width, float height)

Create simple 2D ortho camera centered at origin.

ParameterTypeDescription
widthfloatViewport width in pixels
heightfloatViewport height in pixels

Returns The resulting value.

mk_camera_dollyfunction

void mk_camera_dolly(mk_camera *cam, float distance)

Dolly camera (move toward/away from target).

ParameterTypeDescription
cammk_camera *Camera to modify
distancefloatPositive = closer, negative = farther

mk_camera_get_distancefunction

float mk_camera_get_distance(const mk_camera *cam)

Get distance from camera to target.

ParameterTypeDescription
camconst mk_camera *Value for cam.

Returns The resulting value.

mk_camera_get_projectionfunction

void mk_camera_get_projection(const mk_camera *cam, mk_mat4 *dest)

Get projection matrix (camera -> clip space) Automatically uses correct variant based on renderer backend:

OpenGL: [-1, 1] depth range (homogeneousDepth = true)D3D/Vulkan/Metal: [0, 1] depth range (homogeneousDepth = false)

ParameterTypeDescription
camconst mk_camera *Value for cam.
destmk_mat4 *Value for dest.

mk_camera_get_viewfunction

void mk_camera_get_view(const mk_camera *cam, mk_mat4 *dest)

Get view matrix (world -> camera space) Uses glm_lookat_rh for right-hand coordinate system.

ParameterTypeDescription
camconst mk_camera *Value for cam.
destmk_mat4 *Value for dest.

mk_camera_get_view_projectionfunction

void mk_camera_get_view_projection(const mk_camera *cam, mk_mat4 *dest)

Get combined view-projection matrix.

ParameterTypeDescription
camconst mk_camera *Value for cam.
destmk_mat4 *Value for dest.

mk_camera_move_forwardfunction

void mk_camera_move_forward(mk_camera *cam, float distance)

Move camera forward/backward along view direction.

ParameterTypeDescription
cammk_camera *Camera to modify
distancefloatPositive = forward, negative = backward

mk_camera_move_rightfunction

void mk_camera_move_right(mk_camera *cam, float distance)

Strafe camera left/right.

ParameterTypeDescription
cammk_camera *Camera to modify
distancefloatPositive = right, negative = left

mk_camera_move_upfunction

void mk_camera_move_up(mk_camera *cam, float distance)

Move camera up/down along world up axis.

ParameterTypeDescription
cammk_camera *Camera to modify
distancefloatPositive = up, negative = down

mk_camera_orbitfunction

void mk_camera_orbit(mk_camera *cam, float yaw, float pitch)

Orbit camera around target point.

ParameterTypeDescription
cammk_camera *Camera to modify
yawfloatHorizontal rotation in radians
pitchfloatVertical rotation in radians

mk_camera_orthofunction

mk_camera mk_camera_ortho(mk_vec3 position, mk_vec3 target, float ortho_size, float aspect, float near_plane, float far_plane)

Create orthographic camera (2D or isometric 3D).

ParameterTypeDescription
positionmk_vec3Camera position in world space
targetmk_vec3Point to look at
ortho_sizefloatHalf-height of the view in world units
aspectfloatViewport width / height
near_planefloatNear clip plane distance
far_planefloatFar clip plane distance

Returns The resulting value.

mk_camera_panfunction

void mk_camera_pan(mk_camera *cam, float right, float up)

Pan camera (move camera and target together).

ParameterTypeDescription
cammk_camera *Camera to modify
rightfloatHorizontal pan amount
upfloatVertical pan amount

mk_camera_perspectivefunction

mk_camera mk_camera_perspective(mk_vec3 position, mk_vec3 target, float fov_y, float aspect, float near_plane, float far_plane)

Create perspective camera.

ParameterTypeDescription
positionmk_vec3Camera position in world space
targetmk_vec3Point to look at
fov_yfloatVertical field of view in radians (use glm_rad() to convert degrees)
aspectfloatViewport width / height
near_planefloatNear clip plane distance
far_planefloatFar clip plane distance

Returns The resulting value.

mk_camera_rotate_pitchfunction

void mk_camera_rotate_pitch(mk_camera *cam, float angle)

Rotate camera pitch (around right axis).

ParameterTypeDescription
cammk_camera *Camera to modify
anglefloatRotation in radians (clamped to avoid gimbal lock)

mk_camera_rotate_yawfunction

void mk_camera_rotate_yaw(mk_camera *cam, float angle)

Rotate camera yaw (around up axis).

ParameterTypeDescription
cammk_camera *Camera to modify
anglefloatRotation in radians

mk_camera_set_aspectfunction

void mk_camera_set_aspect(mk_camera *cam, float width, float height)

Update aspect ratio (call on window resize).

ParameterTypeDescription
cammk_camera *Value for cam.
widthfloatValue for width.
heightfloatValue for height.

mk_camera_set_distancefunction

void mk_camera_set_distance(mk_camera *cam, float distance)

Set distance from camera to target (dolly to specific distance).

ParameterTypeDescription
cammk_camera *Value for cam.
distancefloatValue for distance.

mk_camera_set_fovfunction

void mk_camera_set_fov(mk_camera *cam, float fov_y)

Set field of view (radians).

ParameterTypeDescription
cammk_camera *Value for cam.
fov_yfloatValue for fov y.

mk_camera_set_ortho_sizefunction

void mk_camera_set_ortho_size(mk_camera *cam, float size)

Set ortho size (half-height).

ParameterTypeDescription
cammk_camera *Value for cam.
sizefloatSize in bytes.

mk_camera_set_zoomfunction

void mk_camera_set_zoom(mk_camera *cam, float zoom)

Set zoom level (clamped to > 0.01).

ParameterTypeDescription
cammk_camera *Value for cam.
zoomfloatValue for zoom.

Structs

mk_camerastruct

Camera for view and projection matrices.

Perspective mode:fov_y: vertical field of view in radiansnear/far: clip planeszoom: affects fov (smaller = zoom in) Ortho mode:ortho_size: half-height of view in world unitsnear/far: clip planeszoom: affects ortho_size (smaller = zoom in)

FieldTypeDescription
positionmk_vec3Camera position in world space.
targetmk_vec3Look-at target position.
upmk_vec3Up direction (usually 0,1,0).
modemk_camera_modeThe mode.
aspectfloatWidth / height.
near_planefloatNear clip plane.
far_planefloatFar clip plane.
fov_yfloatVertical FOV in radians.
ortho_sizefloatHalf-height of ortho view.
zoomfloat1.0 = normal, <1 = zoom in, >1 = zoom out

Enums

mk_camera_modeenum

Values for camera mode.

ValueDescription
MK_CAMERA_PERSPECTIVE3D perspective projection
MK_CAMERA_ORTHO2D/3D orthographic projection

Typedefs

mk_cameratypedef

typedef struct mk_camera mk_camera

Camera for view and projection matrices.

Perspective mode:fov_y: vertical field of view in radiansnear/far: clip planeszoom: affects fov (smaller = zoom in) Ortho mode:ortho_size: half-height of view in world unitsnear/far: clip planeszoom: affects ortho_size (smaller = zoom in)

mk_camera_modetypedef

typedef enum mk_camera_mode mk_camera_mode

Values for camera mode.