객체 선택 시스템을 구현하려고하는데 카메라를 움직이지 않으면 작동합니다.카메라가 움직이면 객체 선택을 위해 unproject가 작동하지 않습니다.
카메라를 움직이지 않으면 월드 좌표에서 마우스 위치가 올바르게 표시됩니다. 내 스크린 샷에서 마우스를 캡처 할 수는 없지만 흰색 "원"안에 있으며 좌표는 이미지의 왼쪽 상단에 있습니다. 나는 약간 카메라를 아래로 이동하는 경우
는하지만, 그것은 화면의 중앙에 다시 (0 0) 표시하고 있습니다. 내가 원하는과가있을 것으로 예상 무엇
(0, -5) 또는 무언가이다.
double mouse_x, mouse_y;
glfwGetCursorPos(window, &mouse_x, &mouse_y);
vec3 mouse_pos = vec3(float(mouse_x), float(mouse_y), 0.0f);
world_mouse_pos = unProject(mouse_pos, view, projection, vec4(0, 0, window_width, window_height));
mouse_offset.x = last_mouse_pos.x - world_mouse_pos.x;
mouse_offset.y = last_mouse_pos.y - world_mouse_pos.y;
last_mouse_pos.x = world_mouse_pos.x;
last_mouse_pos.y = world_mouse_pos.y;
m_state = glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_MIDDLE);
if (m_state == GLFW_PRESS){
view = translate(view, vec3(-mouse_offset, 0.0f));
glUniformMatrix4fv(view_loc, 1, GL_FALSE, &view.data[0][0]);
}
unProject 기능 : 내가 직교 투영을 사용하고
inline vec3 unProject(const vec3 &pos, const mat4 &modelview, const mat4 &proj, const vec4 &viewport){
mat4 inv = inverse(proj * modelview);
vec4 temp = vec4(pos, 1.0f);
temp.x = ((temp.x - viewport.x)/viewport.z);
temp.y = ((temp.y - viewport.y)/viewport.w);
temp = temp * 2 - 1;
temp.y = - temp.y;
vec4 obj = inv * temp;
return vec3(obj.x, obj.y, obj.z);
}
여기 내 코드입니다. 기본적으로 unProject는 카메라가 다른 위치에 있더라도 항상 동일한 값을 반환합니다. 내가 무엇이 누락 되었습니까?