Я пытаюсь получить координаты, по которым пользователь нажимает на плоскости 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, которое, кажется, коррелирует с позицией щелчка, только что нормализованной, хотя я нигде не нормализую
у: 0
z: -2
который я не могу понять
Редактировать
Извините, ошибка была в том, что я делал непроекции перед моими преобразованиями, которые вы не можете понять из приведенного выше кода. Я решил это сейчас.