определить, касался ли пользователь сферы или нет - PullRequest
0 голосов
/ 22 февраля 2011

Я разрабатываю приложение для Android.Я также работаю с графикой OpenGL.

У меня нарисована сфера на экране, и я хочу позволить пользователю перемещать ее, когда он касается ее.Если он касается вне сферы, ничего не происходит.

Как я могу определить, когда пользователь касается сферы?

1 Ответ

1 голос
/ 22 февраля 2011

Самый простой способ в этом случае - использовать дважды gluUnproject, один раз с Z, установленным на ближний, и один раз с Z, установленным на дальний, который даст вам луч, идущий «в» экран.Если луч пересекает сферу (тривиально), то пользователь щелкнул по ней.В противном случае, нет.

В качестве альтернативы, вы можете прочитать значение буфера z в этом пикселе (это будет остановка конвейера, но вы можете использовать предыдущий кадр, и если анимация не будет полностью дикой, никто, вероятно, не заметит).Это даст вам одну точку в 3D с помощью gluUnproject.Что еще более тривиально для проверки, потому что, если она находится на сфере, то радиус (dx * dx + dy * dy + dz * dz) должен быть радиусом.Чтобы учесть ошибки округления, вы можете сравнить радиус <= 1.0001 * или около того. </p>

И, наконец, вы можете сделать запрос окклюзии с окном просмотра 1x1 пикселей.Это не очень полезно для сферы, поскольку проверка столкновений намного проще, но это может быть чем-то, что вы хотите сделать с гораздо более сложным объектом, который может иметь дыры и где вам нужно детектирование с точностью до пикселя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...