我正在使用OpenGL ES 1.1在我的iPad应用程序中绘制线条。我想确保无论背景颜色如何,绘制的线条总是在屏幕上可见,并且不允许用户选择颜色。是否有混合功能会产生这种效果?因此,绘制的线条的颜色将根据已在其下方绘制的颜色而变化,因此始终可见。
答案 0 :(得分:1)
遗憾的是,片段最终混合到帧缓冲区仍然是固定功能。此外,glLogicOp
未在ES中实现,因此您无法像XOR绘图那样做一些便宜的东西。
我认为净效应是:
因此,您必须实施乒乓管道。
你有两个屏幕外缓冲区。一个表示最后一帧输出的内容,另一个表示在此之前输出帧的内容。
要生成一个新帧,请使用表示帧之前的帧作为输入进行渲染。因为它是一个输入,您可以在任何地方对其进行采样,并在其上进行任何您喜欢的计算。你渲染到你拥有的另一个缓冲区(即更旧的缓冲区)因为你不再关心它的内容。
然后将所有内容复制到屏幕上并将两者交换,这意味着您刚刚绘制的内容仍然在纹理中,以表示您绘制的最后一帧。您刚刚提到的内容将成为您的下一个绘图目标,因为它是您已经方便地存在的东西。
因此,您将立即对渲染纹理感兴趣。您还需要确定要使用哪种功能来为现有背景选择合适的“不同”颜色。也许只是颠倒它会吗?
答案 1 :(得分:0)
我认为这可行:
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);
用白色绘制线条,然后结果将呈现为
[1,1,1,1] * ( 1 - [DstR, DstG, DstB, DstA]) + ([DstR, DstG, DstB, DstA] * 0)
这应该呈现背景为白色的黑色像素,背景为黑色的白色像素,背景为蓝色的黄色像素等。