C++ gluUnproject提供非逻辑值(C+;+;)
我目前正在进行一个项目,我需要能够用鼠标移动对象,并进行一些鼠标拾取。我生成了一个1024*768的窗口,我的gluUnproject代码是:C++ gluUnproject提供非逻辑值(C+;+;),c++,opengl,mouse,raycasting,glm-math,C++,Opengl,Mouse,Raycasting,Glm Math,我目前正在进行一个项目,我需要能够用鼠标移动对象,并进行一些鼠标拾取。我生成了一个1024*768的窗口,我的gluUnproject代码是: glm::vec3 GetOGLPos(int x, int y) { GLint viewport[4]; GLdouble modelview[16]; GLdouble projection[16]; GLfloat winX, winY, winZ; GLdouble posX, posY, posZ; // posX2,
glm::vec3 GetOGLPos(int x, int y)
{
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ; // posX2, posY2, posZ2;
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, &winZ );
gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
std::cout << "PosX = " << posX << " - PosY = " << posY << " - Pos Z = " << posZ << std::endl;
return glm::vec3(posX, posY, posZ);
}
像素的位置是好的,但是我得到的位置,我认为是错误的
如果我在屏幕中央单击(我的对象原点位于(0,0,0)),这里是一些输出:
Xpixel=512 Ypixel=364 XOGL=0 YOGL=-0.0111111 ZOGL=1
以及单击其他位置时的输出:
Xpixel=237 Ypixel=207 XOGL=-0.537109 YOGL=0.425 ZOGL=1
所以我这里有两个问题:
有人能帮我吗?你给GlunProject输入的Z值是多少?这是唯一会影响你的ZOGL值的变量。Z值由代码中的“glReadPixel”给出
glm::ivec2 pos = _input.getMousePosition(); //0, 0 is high left corner
glm::vec3 posIn = GetOGLPos(pos.x, pos.y);