- ウインドウ座標をワールド座標へ変換する -
マウスでクリックした所のウインドウ座標と、その場所のDEPTH値を取得してワールド座標に変換する方法です。
何も無い場所だとDEPTH値はビューポートの一番奥(のような気がします)。


//ビューポート読み込み。YはOpenGL系に直す。
glGetIntegerv(GL_VIEWPORT, viewport);
glY = viewport[3] - _windowY;

//Z座標(デプス)をフレームバッファから読み込む
glReadPixels(_windowX, glY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &glZ);

//OpenGLを描画するときに使っている各変換行列のデータを取得
glGetDoublev(GL_PROJECTION_MATRIX, projectionMatrix); //現在の投影変換行列取得
glGetDoublev(GL_MODELVIEW_MATRIX, modelviewMatrix); //現在の幾何変換行列取得

//ウインドウ座標をワールド座標に変換する。
gluUnProject((GLdouble)_windowX, (GLdouble)glY, (GLdouble)glZ, modelviewMatrix, projectionMatrix, viewport, _glX, _glY, _glZ)



描画する際、初めにPushMatrix()、終わりにPopMatrix()をやりますが、
投影変換行列と幾何変換行列の取得は、現在の変換行列を取得するので、
描画中に取得したい箇所でglGetDoublev()を行います。



関連:マウスでOpenGL空間上にオブジェクトを配置する


inserted by FC2 system