fix rotation to be around the focal point. move camera with focal point in pan. need to increase pan speed as distance from focal becomes larger

This commit is contained in:
2025-08-20 14:44:58 -05:00
parent e7a623b5a5
commit fdeca27b1b

View File

@@ -59,7 +59,8 @@ void *process_cin(void* args) {
glm::vec4 &transl = std::get<1>(camera_bodies[i])->pose[3];
transl = 0.9f*transl + 0.1f*glm::vec4(new_loc, 1); // filter
std::get<1>(camera_bodies[i])->color = glm::vec4(i&0x4, i&0x2, i&0x1, 1);
int color_i = i + 1;
std::get<1>(camera_bodies[i])->color = glm::vec4(color_i&0x4, color_i&0x2, color_i&0x1, 1);
std::get<2>(camera_bodies[i]) = max_hp;
found_match = true;
} else if (std::get<1>(camera_bodies[i])) {
@@ -94,22 +95,26 @@ static glm::vec4 strafe_y = camera_t[1];
static void cursor_position_callback(GLFWwindow* window, double xpos, double ypos) {
float dx = (xpos - prev_cursor_x);
float dy = (ypos - prev_cursor_y);
strafe_x = camera_t[0];
strafe_y = camera_t[1];
prev_cursor_x = xpos;
prev_cursor_y = ypos;
if (mouse_pressed) {
phi += dx / width * glm::radians(360.0);
theta += dy / height * glm::radians(360.0);
double len = glm::length(camera_loc - focal_point);
camera_loc.x = focal_point.x + (len * glm::cos(theta) * glm::cos(-phi));
camera_loc.y = focal_point.y + (len * glm::sin(theta));
camera_loc.z = focal_point.z + (-len * glm::cos(theta) * glm::sin(-phi));
}
if (scroll_pressed) {
focal_point += strafe_x * (dx / 300) + strafe_y * (dy / 300);
glm::vec4 move_vec = -strafe_x * (dx / 100) + strafe_y * (dy / 100);
focal_point += move_vec;
camera_loc += move_vec;
}
double len = glm::length(camera_loc);
camera_loc.x = len * glm::cos(theta) * glm::cos(-phi);
camera_loc.y = len * glm::sin(theta);
camera_loc.z = -len * glm::cos(theta) * glm::sin(-phi);
camera_t = glm::lookAt(camera_loc, focal_point, up);
}