2012-01-07 9 views
2

タイトルはほとんどそれを言います。私はシンプルなビデオエディタを作ろうと考えていましたが、さまざまなエフェクトやフィルタなどの「物流」についてはわかりませんでした。外部プログラムが画像に何らかの効果を与えることを可能にしたいとしましょう。それは必然的に実行されたプログラムでなければならないのか、それとも単にビデオエディタが解析して、本質的にOpenGLに渡すことができるOpenGL命令のセットであるのだろうか。技術的には、それはプログラムになりますが、効果を適用するために完全な本格的なセカンダリプログラムを作るよりも、よりエレガントで標準化されているようです。多分もっと良い方法がありますか?言語に依存しない方法でOpenGL命令を表現する方法はありますか?

編集:回答ありがとうございます。ここではフォローアップです:他のビデオ編集者はどのようにこれを実装していますか?私が尋ねる理由は、答えが上記の点でむしろ否定的であるように見えるので、私はそれががどのように専門のアプリケーションによって行われたのかと思っていました。

答えて

3

実行されたプログラムである必要がありますか、それともビデオエディタが解析して基本的にOpenGLに渡すことができるOpenGL命令のセットであってもかまいません。

問題に近づくにはいくつかの方法があります(「カスタムエフェクトを作成できるビデオエディタを作成する」)。

  1. エディタをサポートするプラグインを作成し、新しいビデオエフェクトプラグインを作成するためのAPIを提供します。 Macromedia Directorはこの方法で作業しました。新しいエフェクトは、プラグインライブラリ(プラットフォームに応じてdll/.so)として実装する必要があります。
  2. ビデオエフェクトを作成するためにアプリケーションにOpenGLバインディングを組み込んだスクリプト言語を埋め込み、アプリケーションの内部状態と対話するための基本的な機能を提供します。これにより、エフェクトの高速開発が可能になりますが、一部の操作ではパフォーマンスが大幅に低下します。 "Blender"(3Dエディタ)はこのように動作し、Mayaは同様のフレームワークを提供します(私は思っています)。基本的には#1ですが、スクリプト言語として実装されています。
  3. エディターにGLSLシェーダーを読み込ませます。 GLSLには "力"(関数/数学)の量はまったくありますが、GLSLだけではあなたが望むものを作ることはできません。なぜなら、あなたのアプリケーションと全くやりとりすることはできません(純粋なGLSLはテクスチャ、フレームバッファなどを作成することができないので、何かを面白くする能力が制限されます)。ほとんどの場合、何らかのフィルタを作成することしかできません。 #1と#2はエンドユーザーに「パワー」を与えます。
  4. node-based effect editorを実装します。私。ユーザーが特定の操作を表すドラッグすることができるいくつかのタイプのノードがあり、それらは入力/出力を有し、ユーザーはそれらを接続することができる。 Blender 3DとUDK(Unreal Development Kit)にはこのような機能があります。私は.kkreiger(サイトがダウンしている、Googleそれ)は96kb 1st person shooterを作るのに似たテクニックを使ったと思う。これは非常に強力ですが、スクリプト言語を使ってノードグラフを作成する方法を提供しない限り、プログラマはマウスを使ってグラフィカルエンティティをドラッグすることを非常に嫌う可能性が非常に高いです(AviSynthは類似していますが、これは#1や#2ほど強力ですが、余分な開発時間を要します。

「言語に依存しない」方法はありません。既存の言語を使用してエフェクトプラグインをアプリケーションとやりとりするか、効果を記述するために独自の「言語」を作成する必要があります。これに対処する言語に依存しない唯一の方法は、プログラマーを雇い、どのような効果が望まれるかを教えてくれることです。しかし、再び、自然言語が必要です。

0

短い答えはノーです。あなたが探しているのは、基盤技術に関係なくプレゼンテーションを記述するHCIの男の夢のDSLです。

+1

他の3つの回答では、少なくとも4つの方法があります。 – ssube

1

確かに、それは基本的にあなた自身の言語を作成するのと同じです。あなたは何らかのテキストインタフェースを介してユーザからOpenGLの "命令"を受け入れることができます(あるいは何とか何かをGUIとして一緒にしたい場合)、それらの "命令"を解析して、基礎となる実装はあなたのアプリケーションがどんな言語であってもそれらの命令を実行します

0

おそらくあなたが望んでいたものではないかもしれませんが、あなたはGLSLを見たいかもしれません。 GLSLは、グラフィックカードドライバによってネイティブの "グラフィックアセンブリ言語"にコンパイルされたCライクな言語です。

3

外部プログラムが画像に何らかの効果を与えることを可能にしたいとしましょう。それは必然的に実行されたプログラムでなければならないのか、それとも単にビデオエディタが解析して、本質的にOpenGLに渡すことができるOpenGL命令のセットであるのだろうか。

どちらかが動作します。しかし、OpenGL標準自体には、 "OpenGL命令"や "オペコード"のようなものはありません。しかし、少なくとも間接的なGLXを持つX11ベースのシステムでは、GLXは実際にオペコードを定義するため、これが可能です。また、複数のXクライアントが間接的である場合、同じコンテキストで動作する可能性があります。 OpenGL3(OpenGL-3では間接的に不可能なオペコードがすべてのオペレーションに定義されているわけではない)が必要な場合があるため、あるいは直接的なコンテキストを必要とするため、ほとんどの場合、 GLXを使用しないでください。

次のオプションは、他のプロセスにOpenGLのための何らかのコマンド/インタプリタプロンプトを提供するということです。あなたが怠け者なら、あなたのプログラムにPythonインタプリタを組み込み、Python OpenGLバインディングと一緒に組み込むことをお勧めします。それらは現在アクティブなどんなコンテキストでも動作し、他のプログラムが実際にPythonスクリプトを送信してそのことを実行できるようにします。

最後に、いくつかのRPCインターフェイスを使ってOpenGLを提供することができました。

または、何らかのDLLをロードするプラグインシステムを提供します。

関連する問題