2012-01-07 22 views
2

標題說得很對。我正在考慮製作一個簡單的視頻編輯器,並且我不確定各種效果和濾鏡等的「後勤」。假設我想讓外部程序對圖像應用某些效果。它必須是必須執行的程序嗎?或者它可以只是一組視頻編輯器可以解析的OpenGL指令,實質上是「傳遞」給OpenGL。從技術上講,這將是一個計劃,但它似乎比完全成熟的二級計劃更加優雅和標準化,以應用效果。也許有更好的方法?有沒有某種方式來以獨立於語言的方式表達OpenGL指令?

編輯:謝謝你們的答案。這裏有一個跟進:其他視頻編輯如何實現這一點?我問的原因是因爲上面的答案似乎是負面的,所以我想知道是如何由專業應用程序完成的

回答

3

它必須是一個被執行的程序,或者它可以簡單地是一組視頻編輯器可以解析的OpenGL指令,並且實質上是「傳遞」給OpenGL的。

有幾種方法可以解決這個問題(「使視頻編輯器能夠創建自定義效果」)。

  1. 使您的編輯器支持插件,並提供製作新視頻效果插件的API。 Macromedia Director以這種方式工作。新的效果必須作爲一個插件庫(dll/.so,取決於你的平臺)來實現。
  2. 將腳本語言與OpenGL綁定到您的應用程序中以製作視頻效果,爲與應用程序的內部狀態進行交互提供基本功能。這將允許更快的效果開發,但某些操作的性能會受到很大影響。 「Blender」(三維編輯器)以這種方式工作,Maya提供了類似的框架(我認爲)。基本上,這是#1,但實現爲腳本語言。
  3. 使您的編輯器加載GLSL着色器。這可以讓你很快地產生一些效果,但除此之外這不是個好主意 - 雖然GLSL擁有「權力」(函數/數學)的體面數量,但GLSL本身並不允許你做任何你想做的事情,因爲它將無法與應用程序進行交互(純粹的GLSL無法創建紋理,幀緩衝等等,這會限制你製作更有趣的東西的能力)。很可能你只能做某種過濾器,沒有什麼更多。 #1和#2將給最終用戶「權力」。
  4. 實施node-based effect editor。即有幾種類型的節點可供用戶拖動以代表某些操作,它們具有輸入/輸出,用戶可以將它們連接起來。 Blender 3D和UDK(虛幻開發工具包)具有此功能。我認爲.kkreiger(網站已關閉,谷歌它)使用類似的技術來製作96kb的第一人稱射擊遊戲。這可能非常強大,但程序員很可能討厭用鼠標拖動圖形實體,除非你還提供了通過腳本語言製作這種節點圖形的方式(AviSynth有類似的東西,但不是那麼相似)。這可以和#1或#2一樣強大,但是會花費你額外的開發時間。

除此之外,沒有「語言無關」的方式來生效。您必須使用現有語言才能使插件與您的應用程序交互,或者您必須使用自己的「語言」來描述效果。解決這個問題的唯一與語言無關的方法是聘請程序員並告訴他你想要什麼樣的效果。但是,再一次,這需要自然語言。

0

簡短的回答是否定的。你在尋找的是一個HCI人的夢想DSL,它將描述呈現,而不管底層技術。

+1

3個其他答案提供了至少4種方式來做到這一點。 – ssube 2012-01-08 01:13:56

1

當然,但它基本上等同於您創建自己的語言。你可以通過一些文本接口從用戶那裏接受OpenGL的「指令」(或者你想以某種方式把某些東西放在一起作爲一個GUI),然後解析這些「指令」,底層實現將用你的應用程序的任何語言執行這些指令寫入。

0

可能不是你想要的,你可能想看看GLSL。 GLSL是一種C語言,由圖形卡驅動程序編譯爲本機「圖形彙編語言」。

3

比方說,我想讓一個外部程序可以對圖像應用一些效果。它必須是必須執行的程序嗎?或者它可以只是一組視頻編輯器可以解析的OpenGL指令,實質上是「傳遞」給OpenGL。

任何一件事情都有效。然而,在OpenGL標準本身中,沒有像「OpenGL指令」或「操作碼」這樣的東西。但至少在具有間接GLX的基於X11的系統中,這是可能的,因爲GLX實際上定義了操作碼。如果多個X客戶端是間接的,則可能在相同的上下文中運行。不幸的是,大多數情況下你不會選擇這個選項,因爲你可能想要一個直接的上下文,因爲你可能需要OpenGL3(對於這些OpenGL3並不是所有的操作都定義了操作碼,這對於OpenGL-3來說是間接不可能的)不要使用GLX。

因此,下一個選項是,您爲其他進程提供某種類型的OpenGL命令/解釋器提示。如果你懶惰,我建議你在程序中嵌入一個Python解釋器,以及Python OpenGL綁定。那些操作在任何當前活動的上下文中,允許其他程序實際發送一些Python腳本來完成它的工作。

最後但並非最不重要的,你可以通過一些RPC接口提供OpenGL。

或者您提供了一些插件系統,您可以在其中加載一些DLL,它可以做到這一點。

相關問題