2011-06-12 3 views
1

안녕하세요 every1 나는 gluUnproject를 사용하는 방법에 대한 게시물을 많이 읽었으며 ive는 기본적으로 그 일을 처리했다고 생각합니다. 하지만 내 문제는 이것입니다. .. ive는 비행기 1 대를 가지고 거기에 클릭하면 아무 문제가 없습니다. 내 객체가 거기에 가면 바깥을 클릭하면 내 물건이 사라집니다. 왜 이런 일을하는지, 어떻게 해결할 수 있습니까? ? 이것은 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; 
} 

gluUnproject

의 제 기능입니다 메신저 단지 개체가 진행되고 POSP가 벡터입니다 알고 값을 인쇄 및 메신저 필자의 그런 어떤 물리 또는 아무것도 없어 (그것을 그 변수를 전달 내 캐릭터를 이동 이 프로젝트 btw)

답변

1

깊이 버퍼에서 읽은 깊이를 확인하십시오. depth 값이 사용자가 설정 한 glClearDepth 값이거나 충분히 근접한 경우 아무 것도 렌더링되지 않았 음을 알 수 있습니다. 따라서 해당 위치에 물체를 놓지 마십시오.

+0

그래서 기본적으로 u는 Z를 확인하고 내 비행기가 어디에서 끝나는 지 확인하므로 해당 위치가 표시되지 않거나 동일한 위치를 유지하지 않는 경우를 의미합니다. – Makenshi

+0

예, 그게 좋은 생각입니다. –