2011-06-12 83 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