我在哪里可以打电话给gluUnproject?

时间:2010-12-08 21:35:08

标签: opengl viewport projection glu openglcontext

这是一个非常简单的问题。

我在哪里可以打电话给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 个答案:

答案 0 :(得分:2)

gluUnProject不是OpenGL的一部分。它是GLU的一部分。从技术上讲,您可以使用所有不访问OpenGL的GLU函数,而根本没有上下文。 gluUnProject就是这样一个功能。

答案 1 :(得分:1)

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