Mewa 使用者指南/Mewa 指令碼程式設計
Mewa 程式語言雖然非常類似於 javascript,但它不遵循任何程式設計語言規範。它是為了滿足 Mewa 應用程式對效能和易用性的要求而設計的。
語言語法可能會發生改變,以匹配未來的需求或使用者偏好。
Mewa 中的所有數字都儲存為浮點數。
布林值 true 和 false 儲存為數字 1.0 和 0.0。
字串用引號內的文字表示,如下所示
myString = "Hello";
if(x == 0)
{
print('Zero')
}
else
{
print('Non zero')
}
while( download.inProgress() ) {
dialog.setProgress( download.progress() );
}
i=0;
do {
// ...
i+=1;
} while( i < 3 );
以下是 Mewa 指令碼支援的所有函式的列表。
如果您需要當前不可用的函式,請聯絡我們,我們很樂意幫助您。
在名為outNodeName的節點的輸出與名為inNodeName的節點的輸入之間新增連線。inputIndex 是輸入埠的索引。節點輸入埠從 0 到 N 索引,其中 N 是輸入埠的數量。換句話說,節點的第一個輸入埠的索引為 0,第二個輸入埠的索引為 1,依此類推。
示例
connectNodes("ColorWheel", "OverlayBlend", 0);
delete 函式刪除變數。它接受一個變數名列表作為輸入引數。
下面的示例建立一個節點,然後刪除引用該節點的變數。如果資料沒有在其他地方引用,則變數引用的資料將被刪除。
myNode = ColorWheelNode();
delete( myNode );
因為myNode 在內部被節點圖(nodegraph)引用(擁有),所以myNode 變數被刪除,但節點沒有被刪除。
刪除所有已設定的變數。
請注意,刪除變數並不一定刪除該變數引用的資料。只有當資料沒有在其他地方引用時,該變數引用的資料才會被刪除。
另請參見#delete()。
返回#Nodegraph 物件。
建立一個新的ColorWheel 節點並將其新增到節點圖。
- ColorWheelNode()
- ColorWheelNode( name, pos )
建構函式ColorWheelNode() 向節點圖新增一個新的 ColorWheel 節點。節點的名稱和位置將自動填充。
建構函式ColorWheelNode( name, pos ) 向節點圖新增一個新的 ColorWheel 節點,該節點具有給定的name,並位於給定的pos。此建構函式用於儲存和恢復節點圖。
- Dialog( text )
- Dialog( text , title )
建立一個帶有文字的對話方塊並顯示它。標題引數是可選的。
示例
dialog = Dialog("Do you wish to continue?");
dialog.addButton("Continue"); // button 0
dialog.addButton("Cancel"); // button 1
clickedOption = dialog.wait();
if( clickedOption == 1 ) { // if clicked cancel button
dialog.close();
return;
}
dialog.setText("Downloading update...");
clickedOption = dialog.wait();
dialog = Dialog("Do you wish to continue?");
dialog.addButton("Continue");
dialog.addButton("Cancel");
clickedOption = dialog.wait(); // returns the button index when clicked
if( clickedOption == 1 ) { // clicked cancel button
dialog.close();
return;
}
示例
function onOkButton()
{
dialog.close();
}
dialog = Dialog("Downloading update...");
dialog.addButton( "Ok", onOkButton );
進度值需要在 0 到 1 之間。要隱藏進度條,請設定一個負值 (< 0)。要顯示正在執行的進度,請設定一個大於 1 的值 (> 1)。
設定空文字以隱藏
設定空文字以隱藏
僅在單擊按鈕時返回。返回值是所單擊按鈕的索引。
關閉並隱藏對話方塊。
進入目錄 dirName。如果成功則返回 true。
name 是一個檔案或目錄名稱。如果檔案/目錄存在則返回 true。
返回給定檔案 name 的檔案大小。如果檔案不存在則返回 -1。
刪除具有給定 name 的檔案或目錄。
建構函式
- Download( dir, url )
開始將指定的 url 下載到給定的 dir。
返回以位元組為單位的已下載資料大小。
返回一個整數,可以是 1、2 或 3
- 正在進行中
- 已完成
- 失敗
取消正在執行的下載。
- FootageNode( source )
- FootageNode( source, pos, name )
source 是一個影片檔名或影像檔名的列表(影像序列)。pos 是一個包含 2 個數字的向量。
node = FootageNode( "C:\MyVideos\sun.mp4" );
另請參見 Node 類。
- Move2DNode()
- Move2DNode( name, pos )
建構函式 Move2DNode() 在節點圖中新增一個新的 Move2D 節點。節點的名稱和位置將自動填充。
建構函式 Move2DNode( name, pos ) 在節點圖中新增一個新的 Move2D 節點,該節點具有給定的 name 並在給定的 pos 處。此建構函式用於儲存和恢復節點圖。
nodegraph() 函式 返回一個 Nodegraph 物件。
將節點圖檢視平移到位置 x,y。
Node 是所有 Mewa 節點的基類,例如 #FootageNode 和 #ShaderNode。
將給定的 name 設定為節點。如果名稱已存在,則會在名稱末尾新增一個數字以使其唯一。
setPos( x, y )
[edit | edit source]setHelpPage( url )
[edit | edit source][panel image]
使用此函式將幫助頁面與節點關聯。幫助頁面是一個 URL 連結。當用戶點選節點引數視窗頂部的[幫助按鈕]時,連結會在系統網頁瀏覽器中開啟。
ShaderNode
[edit | edit source]建構函式
[edit | edit source]- ShaderNode( glslCode, nameHint )
- ShaderNode( glslCode, name, pos )
將node新增到節點圖。
nameHint是在為節點生成唯一名稱時賦予節點的名稱。如果已經存在具有nameHint名稱的節點,則會在nameHint的末尾新增一個數字以使其唯一。
如果沒有提供pos,則節點將放置在“最佳猜測”位置。
學習如何建立著色器節點的最佳方法是檢視示例。Mewa 網上商店提供了許多帶有原始碼的指令碼。一個例子是以太
要填充節點的面板,請使用函式#addFloatControl、#addVec2Control和#addColorControl。這些函式中的每一個都會從底部開始在節點面板中新增一行。
Controls
[edit | edit source]控制元件是用於更改著色器程式中輸入變數值的圖形小部件。有三種不同的控制元件型別
- #addFloatControl 連線到型別為float的輸入變數
- #addVec2Control 連線到型別為vec2的輸入變數
- #addColorControl 連線到型別為vec3的輸入變數
預設情況下,控制元件將顯示變數的名稱作為文字標籤。可以透過函式修改標籤文字
- setName( name )
控制元件名稱在節點內應唯一,因為name可用於控制元件搜尋。
addFloatControl( variableName , defaultValue )
[edit | edit source]在節點[Mewa_User%27s_Guide/Using_the_Node_Graph | 節點面板]中新增一個 GUI 控制元件以更改著色器程式中給定變數的值。
variableName是要控制的著色器原始碼中變數的名稱。
返回一個#FloatControl物件。
addVec2Control( variableName, defaultValues )
[edit | edit source]addColorControl( variableName )
[edit | edit source]此函式建立一個#ColorControl,它連線到名為variableName的變數,並使用黑色(0,0,0)初始化。有關更多資訊,請參閱#ColorControl。
addColorControl( variableName, gray )
[edit | edit source]gray引數是一個數字。此函式建立一個#ColorControl,它連線到名為variableName的變數,並使用三個通道 R、G 和 B 上的gray值初始化。
addColorControl( variableName, red, green, blue )
[edit | edit source]顏色控制元件有 3 個引數。點選顏色按鈕會展開以顯示 3 個引數。
setRenderArea( area )
[edit | edit source]輸入應為“iResolution”、“iChannel0”或“iChannel0+iChannel1”。

- setRenderArea("iResolution") 使用setRenderArea("iResolution")的節點示例是以太。此示例使用傳遞到mainImage( out vec4 fragColor, in vec2 fragCoord )中fragCoord的輸入座標來生成過程影像。因為“iResolution”選項使用始終從 0 到 1 的fragCoord值填充整個視口,所以此選項主要用於生成影像。
- setRenderArea("iChannel0") 使用setRenderArea("iChannel0")的節點示例是HexPixelate。iChannel0選項會自動為節點新增一個輸入埠。連線輸入影像。傳遞到mainImage( out vec4 fragColor, in vec2 fragCoord )的輸入座標fragCoord僅覆蓋輸入影像。此外,請注意fragCoord座標可以在 0 到 1 的限制內具有任何範圍的值。使用變數iChannelResolution[0]中的紋理大小來始終在fragCoord輸入變數中獲得 0 到 1 的範圍。iChannel0選項主要針對建立影像處理節點,它接收一個輸入影像進行處理並輸出結果。
- setRenderArea("iChannel0+iChannel1") 在OverlayBlend中可以找到使用setRenderArea("iChannel0+iChannel1")的示例。此選項主要用於合併 2 張影像。它會為節點新增 2 個輸入埠。在使用iChannel0+iChannel1選項時,請確保在您的著色器原始碼中使用mainImage( out vec4 fragColor, in vec2 fragCoordA, in vec2 fragCoordB )函式來訪問兩個影像的紋理座標。使用變數iChannelResolution[0]中的紋理大小來始終在fragCoord輸入變數中獲得 0 到 1 的範圍。
setFilter( channel, filter )
[edit | edit source]選項是最近鄰、線性或mipmap
setWrap( channel, filter )
[edit | edit source]選項是鉗位或重複。
setFlip( channel, filter )
[edit | edit source]選項包括 NoFlip、HorizontalFlip 或 VerticalFlip。

建立一個以紅色初始化的顏色控制。uColor 是 glsl 著色器程式碼中 vec3 統一變數的名稱。
parameter = node.addColorControl("uColor", 0.8, 0.2, 0.2 );
顏色控制有 3 個引數,每個顏色通道一個。
設定此控制元件的名稱。name 在控制元件中顯示為文字標籤。
另見 控制元件部分.
以下程式碼取自 Ether.mw,展示了 FloatControl 的使用方法。函式 addFloatControl 建立一個控制元件,將其新增到節點面板並返回控制元件以進行進一步設定。
parameter = node.addFloatControl("uDelta", 2.5);
parameter.setName("Delta");
parameter.setStep(0.01);
parameter.setRange(-2, 7);
設定引數可以具有的最小值和最大值。要停用最小值和最大值,使 UI 控制可以達到任何值,請為最小值和最大值設定相同的值 (min == max)。
調整步長值,使引數隨滑鼠移動更快或更慢地增加。
設定此控制元件的名稱。name 在控制元件中顯示為文字標籤。
控制元件名稱在節點內應唯一,因為name可用於控制元件搜尋。
設定此控制元件的名稱。name 在控制元件中顯示為文字標籤。
另見 #控制元件.