C++ 获取平面y=0上的单击位置

C++ 获取平面y=0上的单击位置,c++,opengl,C++,Opengl,我试图获得用户在平面y=0上单击的坐标 我通过取消鼠标坐标的投影来获得近平面和远平面上的世界坐标,然后使用线性插值来找到平面上的坐标,但它没有给我正确的坐标 我的非投影代码: int viewport[4]; double modelview[16]; double projection[16]; glGetIntegerv(GL_VIEWPORT, viewport); glGetDoublev(GL_MODELVIEW_MATRIX, modelvi

我试图获得用户在平面y=0上单击的坐标

我通过取消鼠标坐标的投影来获得近平面和远平面上的世界坐标,然后使用线性插值来找到平面上的坐标,但它没有给我正确的坐标

我的非投影代码:

    int viewport[4];
    double modelview[16];
    double projection[16];

    glGetIntegerv(GL_VIEWPORT, viewport);
    glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
    glGetDoublev(GL_PROJECTION_MATRIX, projection);

    double x, y, z;
    //x_ and y_ are the x and y coordinates of the mouse
    gluUnProject(x_, viewport[3] - y_, 0.0, modelview, projection, viewport, &x, &y, &z);
    near.x = x;
    near.y = y;
    near.z = z;
    gluUnProject(x_, viewport[3] - y_, 100.0, modelview, projection, viewport, &x, &y, &z);
    far.x = x;
    far.y = y;
    far.z = z;

    float t = -near.y / (far.y - near.y);
    target_.y = 0.0f;
    target_.x = near.x - t * (far.x - near.x);
    target_.z = near.z - t * (far.z - near.z);

    std::cout << target_ << std::endl;
int视口[4];
双模态视图[16];
双投影[16];
glGetIntegerv(GL_视口,视口);
glGetDoublev(GL_模型视图_矩阵,模型视图);
glGetDoublev(GL_投影矩阵,投影);
双x,y,z;
//x_u和y_u是鼠标的x和y坐标
gluUnProject(x_,视口[3]-y_,0.0,模型视图,投影,视口,&x,&y,&z);
近x=x;
近y=y;
近z=z;
gluUnProject(x_,视口[3]-y_,100.0,模型视图,投影,视口,&x,&y,&z);
far.x=x;
far.y=y;
far.z=z;
float t t=-near.y/(far.y-near.y);
目标函数y=0.0f;
目标x=近.x-t*(远.x-近.x);
目标_uz=near.z-t*(far.z-near.z);

std::cout对不起,错误是我在转换之前进行了未投影,而您无法从上面的代码中分辨出来。

为了避免这个问题看起来没有答案,请将您的编辑作为答案发布,并接受它。我尝试过,但我没有声誉在8小时之前发布我自己问题的答案,这就是我回来的原因,我现在只需要等两天就可以接受这个答案。