- ウインドウ座標をワールド座標へ変換する - |
マウスでクリックした所のウインドウ座標と、その場所の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空間上にオブジェクトを配置する |