使用Picking在2D和3D之间切换

时间:2013-12-29 04:08:18

标签: c++ opengl 3d glut

所以我正在尝试创建一个菜单,当我选择一个选项时,我希望它能够绘制场景并能够从场景中选择以运行游戏。游戏是跳棋。我可以在没有2D菜单的情况下执行此操作,我执行拾取并且游戏很好。但是当我添加菜单并尝试在两者之间切换时,要么我没有得到任何图像(全黑),要么我设置了一个透视图,并且拾取在相同的范围内不再可用。

设置2D I make:

glMatrixMode(GL_PROJECTION); 
glLoadIdentity();
glOrtho(0, 600, 600, 0, -1, 1); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
//draw 2D

设置我使用的3D

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
gluPerspective(45.0, (GLdouble)600/(GLdouble)600, 1.0, 200.0); 
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//draw 3D

有了这个,我不再能够从场景中挑选物体,但我可以从2D传递到3D并观看整个场景。

执行拣选:

void PickInterface::performPicking(int x, int y) { 

    glSelectBuffer (BUFSIZE, selectBuf);
    glRenderMode(GL_SELECT);
    glInitNames();
    glMatrixMode(GL_PROJECTION);
    glPushMatrix ();
    GLfloat projmat[16];
    glGetFloatv(GL_PROJECTION_MATRIX,projmat);
    glLoadIdentity();
    GLint viewport[4];
    glGetIntegerv(GL_VIEWPORT, viewport);
    gluPickMatrix ((GLdouble) x, (GLdouble) (CGFapplication::height - y), 5.0, 5.0, viewport);
    glMultMatrixf(projmat);
    ((PickScene*)scene)->selectMode=true;
    scene->display();
    ((PickScene*)scene)->selectMode=false;
    glMatrixMode (GL_PROJECTION);
    glPopMatrix ();

    glFlush();

    GLint hits;
    hits = glRenderMode(GL_RENDER);
    processHits(hits, selectBuf);
}

0 个答案:

没有答案