我在EAGLView图层上有一个opengl场景渲染,还有一些其他元素(圆圈等)渲染在UIView上(它是EAGLView的兄弟,位于它上面)。是否可以在两层之间混合颜色?我想做一些差异混合,以获得EAGLView颜色的反转效果。

我一直在玩CGBlendMode,但它似乎只会影响我在当前视图中绘制的内容。我认为这与CGContext有关,但我对细节有点朦胧,我可以强制UIView和EAGLView使用相同的CGContext,以便它们之间的混合工作吗?

帮助,更正,澄清都表示赞赏。提前致谢, -S

有帮助吗?

解决方案

简短的回答是你做不到的。接下来是答案。

通过 EAGLView ,你必须指的是Xcode中的OpenGL ES模板中包含的 UIView 的子类。这个类的特殊之处在于, layerClass 类方法被覆盖并返回 CAEAGLLayer 类而不是 CALayer 类,这是默认的。 / p>

UIView CALayer 成对工作。所有 UIView 对象都由 CALayer 支持, CALayer 是负责布局和渲染到屏幕的对象。 UIView CALayer 的委托,负责在需要时绘制图形。

CALayer 会让它的委托( UIView )绘制成 CGContextRef 。每个 UIView 是一个上下文,因此您不能使用 CGBlendMode 来混合多个视图,因为它只能在一个单独的UIView上下文中运行。

应使用过滤器属性完成 CALayer 的混合。这些是为iPhone OS定义的,但根据文档,可用的过滤器是 undefined 。这是因为此时iPhone OS上没有Core Image。

其他提示

我认为你不能在这个意义上混合颜色。您可以做的最好的是让一个完全遮挡另一个,或者使顶层半透明(在这种情况下,您将看到下面的部分) - 但您将无法进行XOR类型绘制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top