获取平面y=0上的点击位置

Getting Click Position on Plane y=0

本文关键字:位置 平面 获取      更新时间:2023-10-16

我试图获得用户在平面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;

,但这总是输出:x:一个介于+-1之间的值,似乎与点击位置呈正相关,即使我没有规范化任何地方y: 0z: 2

我看不懂

编辑

对不起,错误是我在转换之前做了取消投影,你不能从上面的代码中看出。我现在已经解决了。

对不起,错误是我在转换之前做了取消投影,你不能从上面的代码中看出