Преобразование экранных координат в координаты объекта OpenGL ES 2.0 на Ipad

Я делаю приложение для ipad в OpenGLES 2.0, и у меня есть некоторые объекты, которые я могу перевести с помощью события касания. Поэтому мне нужны координаты объекта (x, y, z), соответствующие координатам экрана (X, Y, Z). Мне удалось получить в Интернете этот учебник:

http://softwareprodigy.blogspot.com/2009/08/gluunproject-for-iphone-opengl-es.html

Но проблема в том, что поскольку я работаю над OpenGL ES 2.0, у меня есть собственная проекция, модель и матрица камеры, которые я передаю вершинному шейдеру. Сначала мне нужна матрица окна просмотра (я упоминаю окно просмотра, использующее встроенную функцию glViewPort ()). Как я могу это получить?

Во-вторых, мне не удалось получить описанный процесс пересечения луча с плоскостями? Может кто-нибудь объяснить это или предложить альтернативный метод ??


ОК Я понял все сверху и все работает, теперь у меня новая проблема: P

Я могу получить координаты объекта (x, y), а также координату z на основе пересечения луча. Однако, когда я переворачиваю или поворачиваю свои объекты, матрица моей модели изменяется, и это приводит к изменению координат объекта, но я знаю только начальные координаты, которые я использовал для рисования объектов (поэтому я не могу определить, является ли объект, на который попал луч, верный).

Есть ли способ отслеживать координаты объекта ??? Один из способов - применить те же преобразования к центральной точке объекта и сохранить его значение, но это будет работать только со сферическими (симметричными объектами). Любые идеи???


person Ikkyu    schedule 29.06.2011    source источник
comment
У меня все заработало, теперь я действительно все понял. Я инвертировал матрицу проекции и модели, поэтому мне не нужно беспокоиться о каких-либо преобразованиях .. Думаю, теперь этот вопрос можно снять   -  person Ikkyu    schedule 01.07.2011
comment
можешь мне объяснить? как вы конвертируете экранные координаты в opengl?   -  person Volodymyr B.    schedule 04.04.2012


Ответы (1)


В OpenGL нет матрицы области просмотра, только параметры области просмотра, которые вы передаете в glViewport. Вы можете получить их, используя glGetIntegerv с GL_VIEWPORT в качестве pname:

Параметры GL_VIEWPORT возвращают четыре значения: координаты окна x и y области просмотра, за которыми следуют его ширина и высота. Первоначально координаты окна x и y равны 0, а ширина и высота установлены равными ширине и высоте окна, в котором GL будет выполнять рендеринг. См. GlViewport.

На странице glGet OpenGL ES 2.0

person Dr. Snoopy    schedule 29.06.2011
comment
спасибо, я смог получить это всего несколько мгновений назад, проблема все еще существует с остальной частью - person Ikkyu; 30.06.2011