2011-06-12 82 views
1

嗨every1我一直在这里阅读大量的帖子,关于如何使用gluUnproject,我认为基本上得到了它的工作。 但是我的问题是这个..我得到了1架飞机,如果我点击那里没有问题我的对象去那里,但如果我点击它之外,我的对象消失任何想法为什么它这样做,我该如何解决它?这是我gluUnprojectgluUnproject问题/移动字符问题

的功能
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; 
} 

IM刚刚打印值知道那里的对象会和POSP是一个Vector和IM移动我的字符传递变量(IVE得到任何物理或类似的东西在这个项目btw)

回答

1

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

+0

所以基本上你的意思是检查Z并找到我的飞机在哪里结束,所以如果它不在那里就不提供它或保持相同的位置正确? – Makenshi 2011-06-12 23:16:55

+0

是的,这是主意。 – 2011-06-12 23:47:49