2

标题几乎说明了这一点。我正在考虑制作一个简单的视频编辑器,但我不确定各种效果和滤镜等的“逻辑”。假设我想让外部程序可以对图像应用一些效果。它是否必须是一个执行的程序,或者它可以只是一组视频编辑器可以解析的 OpenGL 指令,并且基本上“传递”给 OpenGL。从技术上讲,这将是一个程序,但它似乎比仅仅为了应用效果而制作一个完整的二级程序更优雅和标准化。也许有更好的方法?

编辑:谢谢你们的回答。不过,这里有一个跟进:其他视频编辑器如何实现这一点?我问的原因是因为在上述问题上答案似乎相当消极,所以我想知道专业应用程序是如何完成的。

4

5 回答 5

3

假设我想让外部程序可以对图像应用一些效果。它是否必须是一个执行的程序,或者它可以只是一组视频编辑器可以解析的 OpenGL 指令,并且基本上“传递”给 OpenGL。

任何事情都有效。然而,在 OpenGL 标准本身中没有“OpenGL 指令”或“操作码”之类的东西。但至少在具有间接 GLX 的基于 X11 的系统中这是可能的,因为 GLX 实际上定义了操作码。如果是间接的,多个 X 客户端可以在同一个上下文上进行操作。不幸的是,您大部分时间都没有该选项,因为您可能需要直接上下文,因为您可能需要 OpenGL3(并非所有操作都定义了操作码,这使得 OpenGL-3 无法实现间接操作),或者因为您不使用 GLX。

因此,下一个选项是,您为其他进程提供某种针对 OpenGL 的命令/解释器提示。如果你很懒,我建议你在你的程序中嵌入一个 Python 解释器,以及 Python OpenGL 绑定。它们在当前处于活动状态的任何上下文上运行,允许其他程序实际发送一些 Python 脚本来完成它的工作。

最后但并非最不重要的一点是,您可以通过一些 RPC 接口提供 OpenGL。

或者您提供一些插件系统,您可以在其中加载一些 DLL 来执行此操作。

于 2012-01-08T00:45:41.103 回答
3

它是否必须是一个执行的程序,或者它可以只是一组视频编辑器可以解析的 OpenGL 指令,并且基本上“传递”给 OpenGL。

有几种方法可以解决这个问题(“制作能够创建自定义效果的视频编辑器”)。

  1. 让你的编辑器支持插件,并提供制作新视频效果插件的api。Macromedia Director 就是这样工作的。新效果必须作为插件库(dll/.so,取决于您的平台)来实现。
  2. 将带有 OpenGL 绑定的脚本语言嵌入到您的应用程序中以制作视频效果,提供与应用程序内部状态交互的基本功能。这将允许更快地开发效果,但某些操作的性能会受到很大影响。“Blender”(3d 编辑器)以这种方式工作,Maya 提供了类似的框架(我认为)。基本上,这是#1,但实现为脚本语言。
  3. 让您的编辑器加载 GLSL 着色器。这将允许您相当快地制作一些效果,但除此之外,这不是一个好主意 - 虽然 GLSL 具有相当数量的“功能”(函数/数学),但仅 GLSL 不会让您制作任何您想要的东西,因为它根本无法与您的应用程序交互(纯 GLSL 无法创建纹理、帧缓冲区等,这将限制您制作更有趣的东西的能力)。很可能您只能制作某种过滤器,仅此而已。#1 和 #2 将为最终用户提供“权力”。
  4. 实现基于节点的效果编辑器。即,用户可以拖动几种类型的节点来表示某些操作,它们具有输入/输出并且用户可以连接它们。Blender 3D 和 UDK(Unreal Development Kit) 都有这样的功能。我认为 .kkreiger(网站已关闭,google it)使用类似的技术制作 96kb 第一人称射击游戏。这可能非常强大,但程序员很可能讨厌用鼠标拖动图形实体,除非您还提供通过脚本语言制作此类节点图的方法(AviSynth 有类似但不完全一样的东西)。这可以像 #1 或 #2 一样强大,但会花费您额外的开发时间。

除此之外,没有“独立于语言”的方式来生效。要么你必须使用现有的语言让效果插件与你的应用程序交互,要么你必须制作自己的“语言”来描述效果。处理此问题的唯一与语言无关的方法是聘请一名程序员并告诉他您想要什么样的效果。但话又说回来,这需要自然语言。

于 2012-01-08T00:55:48.033 回答
1

当然可以,但这基本上相当于您创建自己的语言。您可以通过某些文本界面(或者如果您想以某种方式将某些东西作为 GUI 组合在一起)接受来自用户的 OpenGL“指令”,然后解析这些“指令”,底层实现将以您的应用程序的任何语言执行这些指令写在。

于 2012-01-07T22:34:31.647 回答
0

Probably not quite what you wanted, you might want to look at GLSL. GLSL is a C-like language that is compiled by the graphic card driver into native "graphic assembly language".

于 2012-01-07T23:55:48.127 回答
0

最简洁的答案是不。您正在寻找的是 HCI 人梦想中的 DSL,它可以描述演示,而不管底层技术如何。

于 2012-01-07T22:27:41.267 回答