mikymod 12 лет назад
Родитель
Сommit
44104ec2de
2 измененных файлов с 245 добавлено и 0 удалено
  1. 89 0
      game/lua/camera.lua
  2. 156 0
      src/binds/CameraBinds.cpp

+ 89 - 0
game/lua/camera.lua

@@ -0,0 +1,89 @@
+local ffi = require("ffi")
+
+ffi.cdef
+[[
+	typedef struct 
+	{
+		Vec3			m_position;
+		Vec3			m_look_at;
+		Vec3			m_up;
+
+		float			m_angle_x;
+		float			m_angle_y;
+
+		Mat4			m_view;
+		Mat4			m_projection;
+
+		float			m_FOV;
+		float			m_aspect;
+
+		float			m_near;
+		float			m_far;
+	} Camera;
+
+	Camera*				camera(const Vec3* position, float fov, float aspect);
+
+	const Vec3&			camera_position(Camera* self);
+
+	void				camera_set_position(Camera* self, const Vec3* position);
+
+	const Vec3&			camera_look_at(Camera* self);
+
+	void				camera_set_look_at(Camera* self, const Vec3* lookat);
+
+	void				camera_set_rotation(Camera* self, const float x, const float y);
+
+	const Vec3&			camera_up(Camera* self);
+
+	float				camera_fov(Camera* self);
+
+	void				camera_set_fov(Camera* self, float fov);
+
+	float				camera_aspect(Camera* self);
+
+	void				camera_set_aspect(Camera* self, float aspect);
+
+	float				camera_near_clip_distance(Camera* self);
+
+	void				camera_set_near_clip_distance(Camera* self, float near);
+
+	float				camera_far_clip_distance(Camera* self);
+
+	void				camera_set_far_clip_distance(Camera* self, float far);
+
+	const Mat4&			camera_projection_matrix(Camera* self);
+
+	const Mat4&			camera_view_matrix(Camera* self);
+
+	void				camera_move_forward(Camera* self, float meters);
+
+	void				camera_move_backward(Camera* self, float meters);
+
+	void				camera_strafe_left(Camera* self, float meters);
+
+	void				camera_strafe_right(Camera* self, float meters);
+]]
+
+Camera = {}
+
+Camera.camera 					= lib.camera
+Camera.position					= lib.camera_position
+Camera.set_position				= lib.camera_set_position
+Camera.look_at					= lib.camera_look_at
+Camera.set_look_at				= lib.camera_set_look_at
+Camera.set_rotation				= lib.camera_set_rotation
+Camera.up						= lib.camera_up
+Camera.fov						= lib.camera_fov
+Camera.set_fov					= lib.camera_set_fov
+Camera.aspect					= lib.camera_aspect
+Camera.set_aspect				= lib.camera_set_aspect
+Camera.near_clip_distance		= lib.camera_near_clip_distance
+Camera.set_near_clip_distance	= lib.camera_set_near_clip_distance
+Camera.far_clip_distance		= lib.camera_far_clip_distance
+Camera.set_far_clip_distance	= lib.camera_set_far_clip_distance
+Camera.projection_matrix		= lib.camera_projection_matrix
+Camera.view_matrix				= lib.camera_view_matrix
+Camera.move_forward				= lib.camera_move_forward
+Camera.move_backward			= lib.camera_move_backward
+Camera.strafe_left				= lib.camera_strafe_left
+Camera.strafe_right				= lib.camera_strafe_right

+ 156 - 0
src/binds/CameraBinds.cpp

@@ -0,0 +1,156 @@
+#include "Camera.h"
+
+namespace crown
+{
+
+extern "C"
+{
+
+Camera*				camera(const Vec3* position, float fov, float aspect);
+
+const Vec3&			camera_position(Camera* self);
+
+void				camera_set_position(Camera* self, const Vec3* position);
+
+const Vec3&			camera_look_at(Camera* self);
+
+void				camera_set_look_at(Camera* self, const Vec3* lookat);
+
+void				camera_set_rotation(Camera* self, const float x, const float y);
+
+const Vec3&			camera_up(Camera* self);
+
+float				camera_fov(Camera* self);
+
+void				camera_set_fov(Camera* self, float fov);
+
+float				camera_aspect(Camera* self);
+
+void				camera_set_aspect(Camera* self, float aspect);
+
+float				camera_near_clip_distance(Camera* self);
+
+void				camera_set_near_clip_distance(Camera* self, float near);
+
+float				camera_far_clip_distance(Camera* self);
+
+void				camera_set_far_clip_distance(Camera* self, float far);
+
+const Mat4&			camera_projection_matrix(Camera* self);
+
+const Mat4&			camera_view_matrix(Camera* self);
+
+void				camera_move_forward(Camera* self, float meters);
+
+void				camera_move_backward(Camera* self, float meters);
+
+void				camera_strafe_left(Camera* self, float meters);
+
+void				camera_strafe_right(Camera* self, float meters);
+}
+
+Camera* camera(const Vec3* position, float fov, float aspect)
+{
+	return new Camera(*position, fov, aspect);
+}
+
+const Vec3& camera_position(Camera* self)
+{
+	return self->position();
+}
+
+void camera_set_position(Camera* self, const Vec3* position)
+{
+	self->set_position(*position);
+}
+
+const Vec3& camera_look_at(Camera* self)
+{
+	return self->look_at();
+}
+
+void camera_set_look_at(Camera* self, const Vec3* lookat)
+{
+	self->set_look_at(*lookat);
+}
+
+void camera_set_rotation(Camera* self, const float x, const float y)
+{
+	self->set_rotation(x, y);
+}
+
+const Vec3& camera_up(Camera* self)
+{
+	return self->up();
+}
+
+float camera_fov(Camera* self)
+{
+	return self->fov();
+}
+
+void camera_set_fov(Camera* self, float fov)
+{
+	self->set_fov(fov);
+}
+
+float camera_aspect(Camera* self)
+{
+	return self->aspect();
+}
+
+void camera_set_aspect(Camera* self, float aspect)
+{
+	self->set_aspect(aspect);
+}
+
+float camera_near_clip_distance(Camera* self)
+{
+	return self->near_clip_distance();
+}
+
+void camera_set_near_clip_distance(Camera* self, float near)
+{
+	self->set_near_clip_distance(near);
+}
+
+float camera_far_clip_distance(Camera* self)
+{
+	return self->far_clip_distance();
+}
+
+void camera_set_far_clip_distance(Camera* self, float far)
+{
+	self->set_far_clip_distance(far);
+}
+
+const Mat4& camera_projection_matrix(Camera* self)
+{
+	return self->projection_matrix();
+}
+
+const Mat4& camera_view_matrix(Camera* self)
+{
+	return self->view_matrix();
+}
+
+void camera_move_forward(Camera* self, float meters)
+{
+	self->move_forward(meters);
+}
+
+void camera_move_backward(Camera* self, float meters)
+{
+	self->move_backward(meters);
+}
+
+void camera_strafe_left(Camera* self, float meters)
+{
+	self->strafe_left(meters);
+}
+
+void camera_strafe_right(Camera* self, float meters)
+{
+	self->strafe_right(meters);
+}
+} // namespace crown