gluUnproject问题/移动字符问题

时间:2011-06-12 22:52:07

标签: c++ opengl

大家好我在这里读了很多关于如何使用gluUnproject的帖子,我想我基本上已经做了什么。 但是,我的问题是这个..我有一架飞机,如果我点击那里没有问题我的对象去那里,但如果我点击它以外我的对象消失任何想法为什么它这样做,我该如何解决它?这是我的gluUnproject的功能

GetOGLPos(float x, float y)
{
    GLint viewport[4];
    GLfloat depth[2];
    GLdouble modelview[16];
    GLdouble projection[16];
    GLfloat winX, winY, winZ;
    GLdouble posX, posY, posZ;

    glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
    glGetDoublev( GL_PROJECTION_MATRIX, projection );
    glGetIntegerv( GL_VIEWPORT, viewport );

    winX = (float)x;
    winY = (float)viewport[3] - (float)y;
    glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, depth );

    gluUnProject( winX, winY, depth[0], modelview, projection, viewport, &posX, &posY, &posZ);

    std::cout<< posX<<" "<<posZ<<std::endl;
    PosP.x = posX;
    PosP.z = posZ;

    PosP.y = 20.0f;
}

我只是打印值来知道对象的去向,PosP是一个Vector并且我正在移动我的角色传递它的变量(我没有物理或类似的东西在这个项目顺便说一下)

1 个答案:

答案 0 :(得分:1)

检查从深度缓冲区读取的深度。如果深度值是你设置的glClearDepth值(或者足够接近它),那么你知道那里没有渲染任何东西。所以不要将对象放在那个位置。