2010-12-08 132 views
0

這是一個非常簡單的問題。我可以在哪裏調用gluUnproject?

我可以在哪裏調用gluUnproject?我需要某種類型的當前openGL上下文嗎?

我擡頭看function here,但這並不是說有沒有任何一種先決條件。

我想這樣做:

GLdouble near[3]; 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    eq::Matrix4f projection; 
    getView()->getProjection(projection); 
    GLdouble *projMatrix = Matrix4d(projection).array; 
    glMultMatrixd(projMatrix); 

    glMatrixMode (GL_MODELVIEW); 
    glLoadIdentity(); 
    eq::Matrix4f camera; 
    getView()->getCamera(camera); 
    GLdouble *modelMatrix = Matrix4d(camera).array; 
    glMultMatrixd(modelMatrix); 

    const PixelViewport pvp = event.context.pvp; 
    int viewport[4] = {pvp.x, pvp.y, pvp.w, pvp.h}; 

    // SCREEN HEIGHT NOT CONTEXT HEIGHT 
    const int y = (int)getWindow()->getPixelViewport().h - event.pointerButtonPress.y; 

    gluUnProject(
          event.pointerButtonPress.x, 
          y, 
          0.0, 
          modelMatrix, 
          projMatrix, 
          viewport, 
          &near[0], 
          &near[1], 
          &near[2] 
          ); 

    near[2] = 1.0f; 
    GLdouble far[3] = {near[0],near[1], -1.0f}; 

在我的服務器節點,而不必把它傳遞給我的渲染節點,並讓他們返回結果。服務器沒有openGL上下文。我還可以打電話給gluUnproject嗎?

回答

2

gluUnProject不是OpenGL的一部分。它是GLU的一部分。從技術上講,您可以使用所有不具有上下文都無法訪問OpenGL的GLU函數。 gluUnProject就是這樣一個功能。

1

Mesa's implementation似乎並不需要當前的上下文。

+0

我不這麼認爲,特別是因爲我沒有用glGet做任何事情。 – 2010-12-08 22:38:19