Я пытаюсь заставить «выбор» работать в 3D-сцене, где вид повернут так, что iPhone удерживается в ландшафтном режиме. Я использую OpenGL ES 2.0 (поэтому все шейдеры, без конвейера с фиксированной функцией).
Я выполняю unproject из кода рендеринга и немедленно рисую результирующий луч, используя GL_LINES (луч вычисляется только в первый раз, когда я касаюсь экрана, поэтому впоследствии я могу перемещать камеру, чтобы наблюдать результирующую линию под разными углами) .
Мой непроектный код/вызов в порядке (множество примеров gluUnproject в сети). Мой код инверсии матриц в порядке (даже по сравнению с excel для нескольких матриц). Однако результирующий луч отклонен как минимум на 5-15 градусов от того места, где я на самом деле «щелкнул» (в Симуляторе это действительно щелчок, поэтому я ожидаю гораздо большей точности от непроекта).
Мой вид повернут в альбомную (после того, как я создаю перспективно-проекционную матрицу, я поворачиваю ее вокруг Z на -90 градусов, соотношение сторон остается портретным). Я считаю, что проблема с математикой здесь.
Есть ли у кого-нибудь опыт выбора/непроецирования конкретно с альбомной ориентацией?