C++ OpenGl获取鼠标位置

C++ OpenGl获取鼠标位置,c++,opengl,mouse,mousemove,C++,Opengl,Mouse,Mousemove,我有一个函数,可以用鼠标坐标在3d空间中创建一个向量 这是我的密码: void myMouse(int x, int y){ GLint viewport[4]; GLdouble modelview[16]; GLdouble projection[16]; GLfloat winX, winY, winZ; GLdouble posX, posY, posZ; glGetDoublev( GL_MODELVIEW_MATRIX, modelv

我有一个函数,可以用鼠标坐标在3d空间中创建一个向量

这是我的密码:

void myMouse(int x, int y){
    GLint viewport[4];
    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;  // Subtract The Current Mouse Y Coordinate 

    glReadPixels( x, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );//Reads the depth buffer


    gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);


    vector.x=posX;
    vector.y=posY;
    vector.z=posZ;
}

然后向量被用作我画的一些点的吸引子。如果我将z位置设置为0,代码运行得非常好,但是当我旋转场景时,点不会跟随鼠标光标。但如果我将vector.z设置为上面的代码,粒子开始向我移动,然后消失,也就是说,它们在视点后面

我希望我的点仅在z轴指向我时在x/y轴上跟随鼠标,在y轴指向我时在x/z轴上跟随鼠标,在x轴指向我时在y/z轴上跟随鼠标


或者,我如何将z位置设置为与我的视角保持固定距离?

您的问题很可能在于以下几行:

glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
glGetDoublev( GL_PROJECTION_MATRIX, projection );
glGetIntegerv( GL_VIEWPORT, viewport );
OpenGL是一个状态机,您查询的内容可以是任何内容。在绘图时,您通常以各种方式操作这些矩阵的内容,因此您查询的可能不是最初用于绘图的矩阵


若要解决此问题,应在设置初始视图后立即在绘制时复制投影、模型视图和视口设置。然后使用这些副本而不是查询的值,这可能与您实际需要的非常不同。

在调用glGet*…之前是否旋转矩阵。。。如果不是,那可能是你的问题。我必须如何旋转它们?但是当我旋转场景时,点不跟随鼠标光标。。。在调用glGet*之前是否旋转。