2009-09-09 2 views
3

У меня есть рендеринг сцены opengl на уровне EAGLView и некоторые другие элементы (круги и такие) рендеринга на UIView (который является дочерним элементом EAGLView, расположенным над ним). Можно ли смешивать цвета между двумя слоями? Я хотел бы сделать какое-то разное смешение, чтобы получить эффект инверсии на цветах из EAGLView.Как я могу сочетать мой UIView и мой EAGLView?

Я играл с CGBlendMode, но это только влияет на то, что я рисую в этом текущем представлении. Я думаю, что это что-то делать с CGContext, но я немного туманно на деталях, я могу заставить UIView и EAGLView иметь тот же CGContext так, что смешивание работает между ними?

Помощь, исправления, разъяснения приветствуются. Спасибо заранее, -S

ответ

7

Короткий ответ: вы не можете. Далее следует длинный ответ.

К EAGLView вы должны указать подкласс UIView, который включен в шаблон OpenGL ES в Xcode. Что делает этот класс особенным, так это то, что метод класса layerClass переопределен и возвращает класс CAEAGLLayer вместо класса CALayer, как и по умолчанию.

UIView и CALayer работа парами. Все объекты UIView поддерживаются CALayer, CALayer - объект, ответственный за компоновку и рендеринг на экране. UIView является делегатом CALayer, и отвечает за рисование это графики, когда это необходимо.

CALayer позволит делегату (UIView) обратить внимание на CGContextRef. Это один контекст на UIView, так что вы не можете использовать CGBlendMode смешать несколько видов, так как он будет работать только в пределах одного контекста UIView.

Смешивание CALayer должно выполняться с использованием свойств фильтра. Они определены для iPhone OS, но доступные фильтры неопределенной в соответствии с документацией. Это связано с тем, что Core Image в настоящее время недоступно на iPhone OS.

0

Я не думаю, что вы сможете смешивать цвета в этом смысле. Лучшее, что вы можете сделать, это полностью затенить другое или полупрозрачный верхний слой (в этом случае вы увидите часть внизу), но вы не сможете сделать рисунок типа XOR.

Смежные вопросы