2 #include "client/client.h"
3 #include "client/camera.h"
8 vec3 eye, front, right, up;
11 static const vec3 world_up = {0.0f, 1.0f, 0.0f};
13 struct camera_movement_dirs camera_movement_dirs = {
16 .up = {world_up[0], world_up[1], world_up[2]},
19 static void camera_update()
22 vec3_add(center, camera.eye, camera.front);
24 mat4x4_look_at(camera.view, camera.eye, center, camera.up);
27 void camera_enable(GLint loc_view)
29 glUniformMatrix4fv(loc_view, 1, GL_FALSE, camera.view[0]);
32 void camera_set_position(v3f32 pos)
34 camera.eye[0] = pos.x;
35 camera.eye[1] = pos.y;
36 camera.eye[2] = pos.z;
41 void camera_set_angle(f32 yaw, f32 pitch)
43 camera.front[0] = camera_movement_dirs.front[0] = cos(yaw) * cos(pitch);
44 camera.front[1] = sin(pitch);
45 camera.front[2] = camera_movement_dirs.front[2] = sin(yaw) * cos(pitch);
47 vec3_norm(camera.front, camera.front);
48 vec3_norm(camera_movement_dirs.front, camera_movement_dirs.front);
50 vec3_mul_cross(camera.right, camera.front, world_up);
51 camera_movement_dirs.right[0] = camera.right[0];
52 camera_movement_dirs.right[2] = camera.right[2];
54 vec3_norm(camera.right, camera.right);
55 vec3_norm(camera_movement_dirs.right, camera_movement_dirs.right);
57 vec3_mul_cross(camera.up, camera.right, camera.front);
58 vec3_norm(camera.up, camera.up);