Я получаю исправленную координацию экрана (0,0 слева внизу):
GLint realy;
realy = winHeight - (GLint) y - 1;
screen.x = (float)x;
screen.y = (float)realy;
Тогда я получаю мир в zNear и zFar:
worldNear = glm::unProject(glm::vec3(screen.x, screen.y, 0.0), viewMatrix, projectionMatrix, glm::vec4(0.0f, 0.0f, winWidth, winHeight));
worldFar = glm::unProject(glm::vec3(screen.x, screen.y, 1.0), viewMatrix, projectionMatrix, glm::vec4(0.0f, 0.0f, winWidth, winHeight));
, ноЯ настроил свою проекцию на перспективу следующим образом, так что я знаю zFar и zNear, и я не уверен, нужен ли приведенный выше код: glm ::спектива (fovy, 1.0f * winWidth / winHeight, zNear,zFar); (нам нужно получить zNear и zFar по X, Y, Z - поэтому нам нужно распроектировать ближний и дальний)
Кроме того, обнаружить буфер Zdepth можно следующим образом:
GLfloat depth;
glReadPixels(screen.x, screen.y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);
и цвета пикселей, как это:
GLubyte pixel[3];
glReadBuffer( GL_BACK );
glReadPixels(screen.x, screen.y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, (void *)pixel);
Проблема здесь : я могу получить Мир X, Y, Z, но мне нужно нормализовать координацию, чтобы я могплавно перемещать объекты с помощью мыши, как?
glm::vec4 normalizePoint = ** ??? **
world.x = normalizePoint.x;
world.y = normalizePoint.y;
world.z = normalizePoint.z;
(в настоящее время моя мировая координата слишком далеко или слишком близко, вот в чем проблема)
Редактировать : я нахожуответ на первый вопрос здесь:
iPhone OpenGL: использование gluUnProject (порт) и определение нажатия на объект
Мне нужен ray-object столкновение, это работает сейчас !!