2012-01-08 12 views
2

2次元スクリーン位置を3次元ワールド空間に変換するために、glm mathsライブラリを使用しています。この場合には、私はworldPosがあることを期待する2次元スクリーン位置を3次元ワールド空間に投影しない

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(0、0、:問題を追跡するための試みで、私は次のようにコードを単純化している

1)。しかし、それは(127100.12、-95325.094、-95325.094)となっています。

glm :: unProjectは何をすべきか誤解していますか?私はその機能を追跡しており、それは問題なく動作しているようです。

答えて

3

screenPosのZ成分は深度バッファの値に対応します。したがって、0.0fはニアクリップ面、1.0fはファークリップ面です。 0,0のscreenPosはの左下隅を指定することを

worldPos = worldPos/(worldPos.z * -1.f); 

も注意してください:

あなたは1つのユニット画面から離れている世界のPOSを検索したい場合は、ベクトルの大きさを変更することができます画面では、worldPos 0,0は画面の中央です。だから0,0,1は-1.3333、-1、-1、400,300,1を与えるべきで、0,0、-1を与えるべきです。

+0

は理にかなっています。ありがとう – JimFing

関連する問題