mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-04-10 06:14:07 +08:00
fix: camera cannot pan left or right
This commit is contained in:
@@ -14,6 +14,7 @@ public:
|
||||
static void cursor_position_callback(GLFWwindow* window, double xpos, double ypos);
|
||||
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods);
|
||||
static void mouse_button_callback(GLFWwindow* window, int button, int action, int mods);
|
||||
static void window_focus_callback(GLFWwindow* window, int focused);
|
||||
static void window_reshape_callback(GLFWwindow* window, int new_width, int new_height);
|
||||
static int start_cubed_application(int argc, char** argv);
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ public:
|
||||
void update_move_camera();
|
||||
|
||||
void camera_init(Player* player);
|
||||
|
||||
void reset_camera();
|
||||
void update_cursor_position_camera(double xpos, double ypos);
|
||||
|
||||
const glm::mat4 get_camera_lookat() const;
|
||||
|
||||
@@ -14,8 +14,8 @@ class Player {
|
||||
private:
|
||||
constexpr static float ACCELERATION = 30.0f;
|
||||
constexpr static float DECELERATION = 50.0f;
|
||||
float m_yaw;
|
||||
float m_pitch;
|
||||
float m_yaw = 0.0f;
|
||||
float m_pitch = 0.0f;
|
||||
|
||||
float m_sensitivity = 0.05f;
|
||||
|
||||
|
||||
15
src/app.cpp
15
src/app.cpp
@@ -29,10 +29,12 @@ void App::init() {
|
||||
m_window.init();
|
||||
glfwSetWindowUserPointer(m_window.get_glfw_window(), this);
|
||||
|
||||
glfwSetWindowSizeCallback(m_window.get_glfw_window(), window_reshape_callback);
|
||||
glfwSetKeyCallback(m_window.get_glfw_window(), key_callback);
|
||||
glfwSetCursorPosCallback(m_window.get_glfw_window(), cursor_position_callback);
|
||||
glfwSetMouseButtonCallback(m_window.get_glfw_window(), mouse_button_callback);
|
||||
glfwSetWindowFocusCallback(m_window.get_glfw_window(), window_focus_callback);
|
||||
glfwSetWindowSizeCallback(m_window.get_glfw_window(), window_reshape_callback);
|
||||
glfwSetKeyCallback(m_window.get_glfw_window(), key_callback);
|
||||
|
||||
|
||||
m_renderer.init();
|
||||
m_window.update_viewport();
|
||||
@@ -88,6 +90,15 @@ void App::mouse_button_callback(GLFWwindow* window, int button, int action, int
|
||||
}
|
||||
}
|
||||
|
||||
void App::window_focus_callback(GLFWwindow* window, int focused) {
|
||||
App* app = static_cast<App*>(glfwGetWindowUserPointer(window));
|
||||
CUBED_ASSERT_MSG(app, "nullptr");
|
||||
if (focused) {
|
||||
app->m_camera.reset_camera();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void App::window_reshape_callback(GLFWwindow* window, int new_width, int new_height) {
|
||||
App* app = static_cast<App*>(glfwGetWindowUserPointer(window));
|
||||
CUBED_ASSERT_MSG(app, "nullptr");
|
||||
|
||||
@@ -17,6 +17,11 @@ void Camera::update_move_camera() {
|
||||
void Camera::camera_init(Player* player) {
|
||||
m_player = player;
|
||||
update_move_camera();
|
||||
reset_camera();
|
||||
}
|
||||
|
||||
void Camera::reset_camera() {
|
||||
m_firse_mouse = true;
|
||||
}
|
||||
|
||||
void Camera::update_cursor_position_camera(double xpos, double ypos) {
|
||||
@@ -24,6 +29,7 @@ void Camera::update_cursor_position_camera(double xpos, double ypos) {
|
||||
m_last_mouse_x = xpos;
|
||||
m_last_mouse_y = ypos;
|
||||
m_firse_mouse = false;
|
||||
return;
|
||||
}
|
||||
|
||||
float offset_x = xpos - m_last_mouse_x;
|
||||
|
||||
@@ -280,6 +280,7 @@ void Player::update_front_vec(float offset_x, float offset_y) {
|
||||
m_yaw += offset_x * m_sensitivity;
|
||||
m_pitch += offset_y * m_sensitivity;
|
||||
|
||||
m_yaw = std::fmod(m_yaw, 360.0);
|
||||
|
||||
if (m_pitch > 89.0f) m_pitch = 89.0f;
|
||||
if (m_pitch < -89.0f) m_pitch = -89.0f;
|
||||
|
||||
Reference in New Issue
Block a user