opengl — gluUnproject дает нелогические значения (C ++)

В настоящее время я работаю над проектом, и мне нужно иметь возможность перемещать объекты с помощью мыши и делать выбор мыши. Я генерирую окно 1024 * 768, и мой код с gluUnproject:

 glm::vec3 GetOGLPos(int x, int y)
{
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ; // posX2, posY2, posZ2;

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

winX = (float)x;
winY = (float)viewport[3] - (float)y;

glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );

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

std::cout << "PosX = " << posX << " - PosY = " << posY << " - Pos Z = " << posZ << std::endl;

return glm::vec3(posX, posY, posZ);
}

И я использую это так:

glm::ivec2 pos = _input.getMousePosition(); //0, 0 is high left corner
glm::vec3 posIn = GetOGLPos(pos.x, pos.y);

Позиция в пикселях хорошая, но позиция, которую я получаю, я думаю, ложная.

Вот некоторые результаты, которые я получаю, если щелкнуть в центре экрана (источник моего объекта находится в (0, 0, 0)):

Xpixel = 512 Ypixel = 364 XOGL = 0 YOGL = -0.0111111 ZOGL = 1

И вывод у меня, когда я нажимаю куда-то еще:

Xpixel = 237 Ypixel = 207 XOGL = -0,537109 YOGL = 0,425 ZOGL = 1

Итак, у меня есть две проблемы здесь:

  1. Значение Z не изменяется (поэтому, возможно, это вектор, а не координаты)
  2. Объект перемещается в направлении моей мыши (поскольку я переводю свой объект в новые координаты, поэтому новой исходной точкой должны быть XOGL, YOGL, ZOGL), но только на несколько пикселей. Таким образом, значения либо неверны, либо неправильно используются.

Кто-нибудь может мне помочь?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]