Используя Android OpenGL ES 1.1 (HTC Desire) ...Android OpenGL ES 1.1: Чтение из буфера трафарета
У меня есть проблема в целом заключается в следующем:
У меня есть различные 3D объекты, предоставляемые в комплексе место действия. Я хочу проверить, нажал ли пользователь на конкретный объект. Этот объект может быть частично скрыт и поэтому может казаться почти любой формой сцены. Я хочу, чтобы объект был «выбран», если пользователь нажимает на часть объекта, которая видна в сцене. Это означает, что я не могу использовать вычисления на основе вектора для пересечения объектов, так как они не могли легко учесть скрытые области объекта.
Так что я пришел с идеей ...
настроить буфер трафарета таким образом, что там, где объект был виден буфер трафарета был заполнен 1s и везде в буфере трафарета равно 0. Когда пользователь нажимает на определенный пиксель в сцене. Мне просто нужно проверить буфер трафарета, чтобы увидеть, содержит ли он 1 или 0, который указывает, был ли щелкнул объект или нет.
Это прекрасно работает на ПК, но на Android OpenGL ES 1.1 кажется, что я не могу читать из буфера трафарета с помощью glReadPixels(), поскольку GL_STENCIL_INDEX не поддерживается.
Кто-нибудь знает, есть ли способ прочитать этот 0/1 из буфера трафарета? Или может кто-нибудь подумать о лучшем алгоритме для определения того, был ли нажат мой объект?
Большое спасибо
Возможно, стоит отметить, что вышеупомянутый подход требует некоторой утонченности, поскольку по умолчанию для 8-битных значений цвета не поддерживается поддержка текстур вложений renderbuffer (значения glReadPixel следует соответствующим образом масштабировать). Другие подводные камни могут включать в себя: сглаживание glEnabled и (но это дикая гипотеза), возможно, некоторые причуды реализации от поставщиков оборудования (например, некоторые видеооборудование может быть не столь точным во время растеризации). Немного поздно, но кто-то еще может найти ответ так, как я. – Rick77