在平面上获得点击位置y = 0

时间:2011-12-27 17:28:45

标签: c++ opengl

我正在尝试获取用户在平面上点击的坐标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:0 z:-2

我无法理解

修改

对不起,错误是我在转换之前进行了非投影,你无法从上面的代码中看出来。我现在已经解决了。

1 个答案:

答案 0 :(得分:0)

很抱歉,错误是我在转换之前进行了非投影,你无法从上面的代码中看出来。