【发布时间】:2016-03-25 21:58:53
【问题描述】:
我在使用 glBlendColor 和 glBlendFunc 在 GLKView 中合成两个图像时遇到问题 - 它似乎实际上并没有设置颜色,因为我设置的任何颜色对结果输出都没有影响。我正在尝试使用 glBlendColor 在帧缓冲区中已经存在的图像之上以各种不透明度合成图像,该图像的不透明度为 1。
谁能告诉我哪里出错了?我在 Xcode 7.3 中为 iOS 9.3 写作。这是我的代码:它将 image1 替换为 image2,没有透明度,但它应该将 image2 放在 image1 的顶部,透明度为 0.5。
let glContext = EAGLContext(API: .OpenGLES3)
let glView = GLKView(frame: view.frame, context: glContext)
let ciContext = CIContext(EAGLContext: glContext)
view.addSubview(glView)
let uiImage1 = UIImage(named: "1.jpg")!
let image1 = CIImage(image: uiImage1)!
let uiImage2 = UIImage(named: "2.jpg")!
let image2 = CIImage(image: uiImage2)!
glView.bindDrawable()
ciContext.drawImage(image1, inRect: image1.extent, fromRect: image1.extent)
glEnable(GLenum(GL_BLEND))
glBlendFunc(GLenum(GL_CONSTANT_ALPHA), GLenum(GL_ONE_MINUS_CONSTANT_ALPHA))
glBlendColor(0, 0, 0, 0.5)
ciContext.drawImage(image2, inRect: image2.extent, fromRect: image2.extent)
glView.display()
【问题讨论】:
-
我没有答案,但是,如果它可以帮助其他人看到这个:我尝试在
drawImages之后添加一些glGets并确认启用和混合仍然是设置的;我还尝试将混合功能切换为GL_ONE、GL_ONE并确认添加绘图。所以我不认为CIContext在修改任何东西,所有的片段肯定都到了输出阶段。 -
@Tommy,感谢您的评论。是的,我已经成功地使用 CoreImage 来做不透明度,然后
glBlendFunc只是将已经透明的第二个图像放在第一个上,但是如果我尝试跳过 CoreImage 并使用glBlendColor来制作不透明度,我得到没有不透明度调整。这让我觉得 CoreImage 上下文由于某种原因不能很好地与glBlendColor配合使用。