私はオブジェクトピッキングシステムを実装しようとしていますが、カメラを移動しないと動作します。カメラが動いても、オブジェクトピッキングのためのプロジェクトとして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は、カメラが別の位置にあるにもかかわらず、常に同じ値を返します。 私は何が欠けていますか?