فهرست منبع

Add Camera::set_orthographic_metrics()

Daniele Bartolini 12 سال پیش
والد
کامیت
936cccef1f
3فایلهای تغییر یافته به همراه46 افزوده شده و 20 حذف شده
  1. 10 1
      engine/Camera.cpp
  2. 4 0
      engine/Camera.h
  3. 32 19
      engine/lua/LuaCamera.cpp

+ 10 - 1
engine/Camera.cpp

@@ -108,6 +108,7 @@ void Camera::set_local_pose(const Matrix4x4& pose)
 void Camera::set_projection_type(ProjectionType::Enum type)
 {
 	m_projection_type = type;
+	update_projection_matrix();
 }
 
 //-----------------------------------------------------------------------
@@ -168,6 +169,14 @@ void Camera::set_far_clip_distance(float far)
 	update_projection_matrix();
 }
 
+//-----------------------------------------------------------------------------
+void Camera::set_orthographic_metrics(uint16_t width, uint16_t height)
+{
+	m_width = width;
+	m_height = height;
+	update_projection_matrix();
+}
+
 //-----------------------------------------------------------------------------
 void Camera::update_projection_matrix()
 {
@@ -175,7 +184,7 @@ void Camera::update_projection_matrix()
 	{
 		case ProjectionType::ORTHOGRAPHIC:
 		{
-			CE_FATAL("TODO");
+			m_projection.build_projection_ortho_rh(m_width, m_height, m_near, m_far);
 			break;
 		}
 		case ProjectionType::PERSPECTIVE:

+ 4 - 0
engine/Camera.h

@@ -78,6 +78,8 @@ struct Camera
 	float					far_clip_distance() const;
 	void					set_far_clip_distance(float far);
 
+	void					set_orthographic_metrics(uint16_t width, uint16_t height);
+
 public:
 
 	void					update_projection_matrix();
@@ -98,6 +100,8 @@ public:
 	float					m_aspect;
 	float					m_near;
 	float					m_far;
+	uint16_t				m_width;
+	uint16_t				m_height;
 };
 
 } // namespace crown

+ 32 - 19
engine/lua/LuaCamera.cpp

@@ -251,28 +251,41 @@ CE_EXPORT int camera_set_far_clip_distance(lua_State* L)
 	return 0;
 }
 
+CE_EXPORT int camera_set_orthographic_metrics(lua_State* L)
+{
+	LuaStack stack(L);
+
+	Camera* camera = stack.get_camera(1);
+	const uint16_t width = stack.get_int(2);
+	const uint16_t height = stack.get_int(3);
+
+	camera->set_orthographic_metrics(width, height);
+	return 0;
+}
+
 //-----------------------------------------------------------------------------
 void load_camera(LuaEnvironment& env)
 {
-	env.load_module_function("Camera", "local_position",         camera_local_position);
-	env.load_module_function("Camera", "local_rotation",         camera_local_rotation);
-	env.load_module_function("Camera", "local_pose",             camera_local_pose);
-	env.load_module_function("Camera", "world_position",         camera_world_position);
-	env.load_module_function("Camera", "world_rotation",         camera_world_rotation);
-	env.load_module_function("Camera", "world_pose",             camera_world_pose);
-	env.load_module_function("Camera", "set_local_position",     camera_set_local_position);
-	env.load_module_function("Camera", "set_local_rotation",     camera_set_local_rotation);
-	env.load_module_function("Camera", "set_local_pose",         camera_set_local_pose);
-	env.load_module_function("Camera", "set_projection_type",    camera_set_projection_type);
-	env.load_module_function("Camera", "projection_type",        camera_projection_type);
-	env.load_module_function("Camera", "fov",                    camera_fov);
-	env.load_module_function("Camera", "set_fov",                camera_set_fov);
-	env.load_module_function("Camera", "aspect",                 camera_aspect);
-	env.load_module_function("Camera", "set_aspect",             camera_set_aspect);
-	env.load_module_function("Camera", "near_clip_distance",     camera_near_clip_distance);
-	env.load_module_function("Camera", "set_near_clip_distance", camera_set_near_clip_distance);
-	env.load_module_function("Camera", "far_clip_distance",      camera_far_clip_distance);
-	env.load_module_function("Camera", "set_far_clip_distance",  camera_set_far_clip_distance);
+	env.load_module_function("Camera", "local_position",            camera_local_position);
+	env.load_module_function("Camera", "local_rotation",            camera_local_rotation);
+	env.load_module_function("Camera", "local_pose",                camera_local_pose);
+	env.load_module_function("Camera", "world_position",            camera_world_position);
+	env.load_module_function("Camera", "world_rotation",            camera_world_rotation);
+	env.load_module_function("Camera", "world_pose",                camera_world_pose);
+	env.load_module_function("Camera", "set_local_position",        camera_set_local_position);
+	env.load_module_function("Camera", "set_local_rotation",        camera_set_local_rotation);
+	env.load_module_function("Camera", "set_local_pose",            camera_set_local_pose);
+	env.load_module_function("Camera", "set_projection_type",       camera_set_projection_type);
+	env.load_module_function("Camera", "projection_type",           camera_projection_type);
+	env.load_module_function("Camera", "fov",                       camera_fov);
+	env.load_module_function("Camera", "set_fov",                   camera_set_fov);
+	env.load_module_function("Camera", "aspect",                    camera_aspect);
+	env.load_module_function("Camera", "set_aspect",                camera_set_aspect);
+	env.load_module_function("Camera", "near_clip_distance",        camera_near_clip_distance);
+	env.load_module_function("Camera", "set_near_clip_distance",    camera_set_near_clip_distance);
+	env.load_module_function("Camera", "far_clip_distance",         camera_far_clip_distance);
+	env.load_module_function("Camera", "set_far_clip_distance",     camera_set_far_clip_distance);
+	env.load_module_function("Camera", "set_orthographic_metrics",  camera_set_orthographic_metrics);	
 
 	env.load_module_enum("Camera", "ORTHOGRAPHIC", ProjectionType::ORTHOGRAPHIC);
 	env.load_module_enum("Camera", "PERSPECTIVE", ProjectionType::PERSPECTIVE);