次の問題に glm 数学ライブラリを使用しています: 2D 画面位置を 3D ワールド空間に変換します。
問題を追跡するために、コードを次のように簡略化しました。
float screenW = 800.0f;
float screenH = 600.0f;
glm::vec4 viewport = glm::vec4(0.0f, 0.0f, screenW, screenH);
glm::mat4 tmpView(1.0f);
glm::mat4 tmpProj = glm::perspective( 90.0f, screenW/screenH, 0.1f, 100000.0f);
glm::vec3 screenPos = glm::vec3(0.0f, 0.0f, 1.0f);
glm::vec3 worldPos = glm::unProject(screenPos, tmpView, tmpProj, viewport);
この場合、glm::unProject を使用すると、worldPos は (0, 0, 1) になると予想されます。ただし、(127100.12、-95325.094、-95325.094) として送信されます。
glm::unProject がすべきことを誤解していますか? 関数をトレースしたところ、問題なく動作しているようです。