【问题标题】:How can I blend between my UIView and my EAGLView?如何混合我的 UIView 和我的 EAGLView?
【发布时间】:2010-11-26 23:03:24
【问题描述】:

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

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

感谢您的帮助、更正、澄清。提前致谢, -S

【问题讨论】:

    标签: iphone opengl uikit uiview eaglview


    【解决方案1】:

    简短的回答是你不能。接下来是长答案。

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

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

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

    CALayer 的混合应该使用过滤器属性来完成。这些是为 iPhone OS 定义的,但根据文档,可用的过滤器是 undefined。这是因为 Core Image 目前在 iPhone OS 上不可用。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-30
        • 1970-01-01
        • 1970-01-01
        • 2019-05-28
        • 1970-01-01
        相关资源
        最近更新 更多