iOS 5 + GLKView: Как получить доступ к пиксельным данным RGB для выбора вершин на основе цвета?

Я преобразовал свой личный каркас OGLES 2.0, чтобы воспользоваться преимуществами функциональности, добавленной новым каркасом iOS 5 GLKit .

После приятных результатов, я хочу реализовать механизм выбора цвета, описанный здесь . Для этого вы должны получить доступ к заднему буферу, чтобы получить значение RGBA пикселя, которого коснулись, которое затем используется в качестве уникального идентификатора для объекта вершины / примитива / дисплея. Конечно, для этого требуется временная уникальная окраска всех вершин / примитивов / экранных объектов.

У меня есть два вопроса, и я был бы очень благодарен за помощь в любом из них:

  1. У меня есть доступ к GLKViewController , GLKView , CAEAGLLayer ] (из GLKView ) и EAGLContext . У меня также есть доступ ко всем командам, связанным с буфером OGLES 2.0 .Как мне объединить их, чтобы определить цвет пикселя в EAGLContext, который я нажимаю на экране?

  2. Учитывая, что я использую объекты буфера вершин для рендеринга, есть ли удобный способ чтобы переопределить цвет, предоставленный моему вершинному шейдеру , который, во-первых, не требует изменения атрибутов буферизованной вершины (цвета) , а во-вторых, не требует добавления оператора IF в вершинный шейдер?

Я предполагаю, что ответ на (2) - «нет», но из соображений производительности и несложного обновления кода я подумал, что разумно проконсультироваться с кем-нибудь более опытным.

Любые предложения будут с благодарностью приняты. Спасибо за ваше время.

ОБНОВЛЕНИЕ

Теперь я знаю, как читать пиксельные данные из активного фрейм-буфера с помощью glReadPixels . Так что я думаю, мне просто нужно выполнить рендеринг специальных «уникальных цветов» в задний буфер, ненадолго переключиться на него и прочитать пиксели, а затем переключиться обратно. Это неизбежно создаст визуальное мерцание, но я думаю, что это самый простой способ; безусловно, быстрее (и разумнее), чем создание CGImageContextRef из снимка экрана и его анализ.

Тем не менее, мы будем очень благодарны за любые советы относительно заднего буфера.

7
задан KomodoDave 23 October 2011 в 00:33
поделиться