Camera

Typedefs

typedef struct binocle_camera binocle_camera

2D Camera

typedef struct binocle_camera_3d binocle_camera_3d

Functions

binocle_camera binocle_camera_new(struct binocle_viewport_adapter *adapter)

Creates a new camera instance.

Parameters

adapter – The viewport adapter to apply to this camera

Returns

The camera

kmVec2 binocle_camera_screen_to_world_point(binocle_camera camera, kmVec2 screen_position)

Converts a point from screen coordinates to world coordinates.

Parameters
  • camera – The camera

  • screen_position – The position in screen coordinates

Returns

The world point

void binocle_camera_update_matrixes(binocle_camera *camera)

Updates the camera matrixes This does the actual calculations to update the internal matrixes.

Parameters

camera – The camera

void binocle_camera_force_matrix_update(binocle_camera *camera)

Force updating the camera matrixes as soon as we access any of them This sets the matrixes and bounds flags as dirty so that as soon as we need to access any of the matrixes we recalculate them right away.

Parameters

camera – The camera

kmMat4 *binocle_camera_get_transform_matrix(binocle_camera *camera)

Gets the transform matrix of the camera.

Parameters

camera – The camera

Returns

The transform matrix

struct binocle_viewport_adapter *binocle_camera_get_viewport_adapter(binocle_camera camera)

Gets the viewport adapter associated to the camera.

Parameters

camera – The camera

Returns

Teh viewport adapter associated to the camera

kmAABB2 binocle_camera_get_viewport(binocle_camera camera)

Helper to get the viewport of the camera It actually gets the viewport of the viewport adapter associated to the camera.

Parameters

camera – The camera

Returns

the viewport of the camera

void binocle_camera_set_position(binocle_camera *camera, float x, float y)

Sets the camera position in world coordinates.

Parameters
  • camera – The camera

  • x – X position

  • y – Y position

kmVec2 binocle_camera_world_to_screen_point(binocle_camera camera, kmVec2 world_position)

Converts a point from world coordinates to screen coordinates.

Parameters
  • camera – The camera

  • world_position – The position in world coordinates

Returns

The screen point

kmMat4 binocle_camera_get_projection_matrix(binocle_camera camera)

Gets the camera projection matrix.

Parameters

camera – The camera

Returns

The projection matrix

kmMat4 binocle_camera_get_view_projection_matrix(binocle_camera camera)

Get the view projection matrix of the given camera Gets the view-projection matrix which is the transformMatrix * the projection matrix.

Parameters

camera – The camera

Returns

The view projection matrix

binocle_camera_3d binocle_camera_3d_new(kmVec3 position, float near, float far, float fov_y)

Creates a new 3D camera instance.

Parameters
  • position – the position of the camera in world coordinates

  • near – the near plane distance

  • far – the far plane distance

  • fov_y – the vertical field of view

Returns

an instance of binocle_camera_3d

void binocle_camera_3d_update_matrixes(binocle_camera_3d *camera)

Updates the transform and inverse_transform matrices.

Parameters

camera – the instance of binocle_camera_3d to update

void binocle_camera_3d_set_position(binocle_camera_3d *camera, kmVec3 position)

Sets the camera position in world coordinates and updates the underlying matrices.

Parameters
  • camera – the instance of binocle_camera_3d

  • position – the position in world coordinates

void binocle_camera_3d_set_rotation(binocle_camera_3d *camera, float pitch, float yaw, float roll)

Sets the orientation of the camera and updates the underlying matrices.

Parameters
  • camera – the instance of the binocle_camera_3d

  • pitch – the pitch in degrees

  • yaw – the yaw in degrees

  • roll – the roll in degrees

void binocle_camera_3d_set_near(binocle_camera_3d *camera, float near)

Sets the camera near plane distance.

Parameters
  • camera – the instance of the binocle_camera_3d

  • near – the distance of the near plane

void binocle_camera_3d_set_far(binocle_camera_3d *camera, float far)

Sets the camera far plane distance.

Parameters
  • camera – the instance of the binocle_camera_3d

  • far – the distance of the far plane

kmMat4 *binocle_camera_3d_get_transform_matrix(binocle_camera_3d *camera)

Returns the transform matrix of the camera.

Parameters

camera – the instance of the binocle_camera_3d

Returns

the transform matrix of the camera

void binocle_camera_3d_translate(binocle_camera_3d *camera, float x, float y, float z)

Translates the camera in the world.

Parameters
  • camera – the instance of the binocle_camera_3d

  • x – the amount to move on the X direction (positive is right)

  • y – the amount to move on the Y direction (positive is up)

  • z – the amount to move on the Z direction (positive is into the scene)

void binocle_camera_3d_rotate(binocle_camera_3d *camera, float pitch, float yaw, float roll)

Rotates the camera by the given amount on the different axes.

Parameters
  • camera – the instance of binocle_camera_3d

  • pitch – the pitch in degrees

  • yaw – the yaw in degrees

  • roll – the roll in degrees

kmMat4 *binocle_camera_3d_get_inverse_transform_matrix(binocle_camera_3d *camera)

Returns the inverse transform matrix.

Parameters

camera – the instance of binocle_camera_3d

Returns

the inverse transform matrix

void binocle_camera_3d_screen_to_world_ray_internal(int mouse_x, int mouse_y, int screen_width, int screen_height, kmMat4 view_matrix, kmMat4 projection_matrix, kmVec3 *out_direction)

Internal function to transform an X,Y screen space coordinate to world space and get the direction ray from it.

Parameters
  • mouse_x – the X coordinate in screen space

  • mouse_y – the Y coordinate in screen space

  • screen_width – the window width in pixels

  • screen_height – the window height in pixels

  • view_matrix – camera position and orientation

  • projection_matrix – camera parameters (ratio, field of view, near and far plane)

  • out_direction – the direction, in world space, of the ray that goes “through” the mouse position

void binocle_camera_3d_screen_to_world_ray(binocle_camera_3d *camera, int mouse_x, int mouse_y, kmAABB2 viewport, kmVec3 *out_direction)

Transforms an X,Y screen space coordinate into a direction ray in world space.

Parameters
  • camera – an instance of binocle_camera_3d

  • mouse_x – the X coordinate in screen space

  • mouse_y – the Y coordinate in screen space

  • viewport – the camera/window viewport

  • out_direction – the direction, in world space, of the ray that goes “through” the mouse position

struct binocle_camera
#include <binocle_camera.h>

2D Camera

Public Members

kmMat4 transform_matrix
kmMat4 inverse_transform_matrix
kmVec2 position
kmVec2 origin
float rotation
float zoom
float min_zoom
float max_zoom
bool are_matrixes_dirty
bool are_bounds_dirty
kmAABB2 bounds
struct binocle_viewport_adapter *viewport_adapter
float near_distance
float far_distance
struct binocle_camera_3d

Public Members

kmMat4 transform_matrix
kmMat4 inverse_transform_matrix
kmVec3 position
kmVec3 front
kmVec3 up
kmVec3 right
kmVec3 world_up
float yaw
float pitch
float fov_y
float near_distance
float far_distance