Я только что посмотрел на http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixGrabber.html, который выглядит как MatrixGrabber, на который вы ссылаетесь, и не выглядит особенно сложным - на самом деле, он перестроен.Вы можете просто использовать gl2.getMatrix
напрямую и вставить его в gluUnProject.
Вероятная причина разработки кода MatrixGrabber заключается в том, что он кэширует значения для многократного использования - поскольку графический процессор работает асинхронно с процессоромкод может ждать ответа getMatrix
, поэтому более эффективно получить его как можно меньше раз и повторно использовать данные.
Еще один источник сложности в общей проблеме состоит в том, что касание указывает только два размеры.Одно касание не указывает на какую-либо глубину, поэтому вы должны сделать это некоторым специфическим для приложения способом.Очевидным подходом является чтение буфера глубины (хотя некоторые реализации OpenGL этого не поддерживают), но это не работает, если у вас есть, например, вещи, которые должны быть «прозрачными» для касаний.Альтернативой является создание луча (например, путем двойного проецирования с двумя разными глубинами), а затем передача лучей в вашу сцену.