最終更新: mikk_ni3_92 2008年10月14日(火) 15:52:01履歴
現在地 >> メニュー >> 基本編16 >> 基本編16::gluUnProject()
関連:基本編16::gluProject()
gluUnProject()関数は、ウィンドウ座標からオブジェクト座標を求める関数である。
gluUnProject()関数に必要なものは
である。
[例]:ウィンドウ座標で(50,50)にある物体のオブジェクト座標を推定
※「glReadPixels()関数」、「gluUnProject()関数」は左「下」原点。
ウィンドウ座標は、左「上」原点となっているため、
上下を反転する必要がある。(例はWindowの高さから引いている)
サンプルコード >> 基本編16::まとめコード2
メモ
gluUnProject()関数は、呼ばれる度に「逆行列」を計算する。
従って、この関数を何度も使う場合は、自分で作った方が効率的な可能性がある。
関連:基本編16::gluProject()
gluUnProject()関数は、ウィンドウ座標からオブジェクト座標を求める関数である。
GLint gluUnProject( GLdouble winX, //ウィンドウ座標のX,Y GLdouble winY, GLdouble winZ, //デプスバッファの値 const GLdouble *model, //モデルビュー行列 const GLdouble *proj, //透視投影行列 const GLint *view, //ビューポート GLdouble* objX, //オブジェクト座標の格納場所(X,Y,Z) GLdouble* objY, GLdouble* objZ )
gluUnProject()関数に必要なものは
- ウィンドウ座標(X,Y)
- デプスバッファの値 → glReadPixels()などで「GL_DEPTH_COMPONENT」を取得
- モデルビュー行列、透視投影行列、ビューポート
- オブジェクト座標の格納場所
である。
[例]:ウィンドウ座標で(50,50)にある物体のオブジェクト座標を推定
double modelview[16]; glGetDoublev(GL_MODELVIEW_MATRIX, modelview); double projection[16]; glGetDoublev(GL_PROJECTION_MATRIX, projection); int viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); float z; double objX; double objY; double objZ; glReadPixels(50,WindowHeight - 50,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&z); gluUnProject(50,WindowHeight - 50,z,modelview,projection,viewport,&objX,&objY,&objZ);
※「glReadPixels()関数」、「gluUnProject()関数」は左「下」原点。
ウィンドウ座標は、左「上」原点となっているため、
上下を反転する必要がある。(例はWindowの高さから引いている)
サンプルコード >> 基本編16::まとめコード2
メモ
gluUnProject()関数は、呼ばれる度に「逆行列」を計算する。
従って、この関数を何度も使う場合は、自分で作った方が効率的な可能性がある。