В настоящее время я пытаюсь преобразовать касание из экранного пространства в то место, где оно находится в мировом пространстве для 2D-игры, над которой я работаю.
Вид, над которым я работаю, имеет почти ту же систему координат, что и экран, в основном, если кто-то коснется x = 345, y = 500 пикселей на экране, он будет таким же на виде, хотя y назад, потому что opengl использует левый нижний угол вместо 0 в левом верхнем углу.
«Камера» имеет 0,0,0, смотря на отрицательный Z. Я говорю «Камера», так как я еще не закодировал ее. Сейчас я просто перевожу все спрайты Z на -100.
Псевдокод, который я пробовал до сих пор (и дважды проверял в mathematica), таков:
// scale the screen point into a value from 0 to 1
point = { screenPoint.x / screenWidth, screenPoint.y / screenHeight, -100, 1 }
// doing a full inverse here, not just swapping rows and cols
out = Inverse(viewProjection) * point
inverseW = 1 / out.w
finalWorldCoord = out * inverseW
Проблема в том, что это дает мне значения, которые намного меньше, чем они должны быть, и я не уверен почему.
Это с OpenGL ES 2.0, на iPhone OS 3.2.
Кто-нибудь знает правильный способ сделать это?