OpenGL中的交叉淡入淡出场景
Posted
技术标签:
【中文标题】OpenGL中的交叉淡入淡出场景【英文标题】:Crossfading scenes in OpenGL 【发布时间】:2009-08-20 14:03:27 【问题描述】:我想在 OpenGL 中渲染两个场景,然后从一个场景到第二个场景进行视觉交叉渐变。任何人都可以建议一个学习如何做到这一点的起点吗?
【问题讨论】:
【参考方案1】:您需要学习的最重要的事情是如何进行渲染到纹理。
当您在 2 个纹理中同时拥有两个场景时,在它们之间进行交叉淡化真的很简单。事实上,做所有有趣的淡入淡出效果非常简单:)
【讨论】:
谢谢,我会研究渲染到纹理。我考虑过这一点,但不确定它会对性能产生什么样的影响。 现在没有了。没有它,您将无法制作大多数全屏效果。 太糟糕了 EXT_framebuffer_object 仍然卡在扩展地狱中:( 不是,见OpenGL 3.2核心规范,第219页:opengl.org/registry/doc/glspec32.core.20090803.pdf【参考方案2】:这里是sample code of a cross fade。这似乎与 Goz 的有所不同,因为这两个场景是动态的。该示例使用模板缓冲区进行交叉淡入淡出。
【讨论】:
事情是 .. Rage 128 在 10 多年前发布。在那些日子里,渲染到纹理效果不佳。将场景 A 渲染到纹理 A,将场景 B 渲染到纹理 B,然后将纹理 A 和纹理 B 渲染到帧缓冲区要容易得多。额外的好处是它是一个如此通用的代码路径,它被优化到地狱并提供各种有趣的效果。您建议的那种模板缓冲区技巧确实有效,但不是大多数开发人员所做的,因此会更慢并且更复杂。它确实有效:) 我在发布问题之前找到了该链接,但这不是我要寻找的交叉淡入淡出效果(我什至不会称之为交叉淡入淡出)。【参考方案3】:我可以想出另一种交叉淡入淡出场景的方法,但这取决于您的场景渲染器的复杂程度。如果它很简单,您可以在渲染第二个场景之前启动一个着色器程序来实现所需的混合效果。我会尝试 glBlend (GL_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 并在着色器中操纵片段的 alpha 值。
FBO 是顺便说一句。已经有好几年了 - 是否延期。如果您的渲染器很复杂并且使用着色器程序,您也可以将两个场景渲染到 FBO 并混合它们。使用 FBO 是一种非常常见的技术,可以轻松应用各种效果渲染。
【讨论】:
以上是关于OpenGL中的交叉淡入淡出场景的主要内容,如果未能解决你的问题,请参考以下文章
AVMutableVideoComposition 中的交叉淡入淡出
为啥这个 CSS @keyframes 规则不交叉淡入淡出?