跳轉到內容

Mewa 使用者指南/Mewa 指令碼程式設計

來自 Wikibooks,為開放世界提供開放書籍

語言參考

[編輯 | 編輯原始碼]

Mewa 程式語言雖然非常類似於 javascript,但它不遵循任何程式設計語言規範。它是為了滿足 Mewa 應用程式對效能和易用性的要求而設計的。

語言語法可能會發生改變,以匹配未來的需求或使用者偏好。

資料型別

[編輯 | 編輯原始碼]

Mewa 中的所有數字都儲存為浮點數。

布林值 true 和 false 儲存為數字 1.0 和 0.0。

字串用引號內的文字表示,如下所示

myString = "Hello";

if 條件語句

[編輯 | 編輯原始碼]
if(x == 0) 
{
    print('Zero')
}
else
{
    print('Non zero')
}

while 迴圈

[編輯 | 編輯原始碼]
while( download.inProgress() ) {
    dialog.setProgress( download.progress() );
}

do-while 迴圈

[編輯 | 編輯原始碼]
i=0;
do {
    // ...
    i+=1;
} while( i < 3 );

以下是 Mewa 指令碼支援的所有函式的列表。

如果您需要當前不可用的函式,請聯絡我們,我們很樂意幫助您。

connectNodes( outNodeName, inNodeName, inputIndex )

[編輯 | 編輯原始碼]

在名為outNodeName的節點的輸出與名為inNodeName的節點的輸入之間新增連線。inputIndex 是輸入埠的索引。節點輸入埠從 0 到 N 索引,其中 N 是輸入埠的數量。換句話說,節點的第一個輸入埠的索引為 0,第二個輸入埠的索引為 1,依此類推。

示例

connectNodes("ColorWheel", "OverlayBlend", 0);

delete( var1, var2, ... )

[編輯 | 編輯原始碼]

delete 函式刪除變數。它接受一個變數名列表作為輸入引數。

下面的示例建立一個節點,然後刪除引用該節點的變數。如果資料沒有在其他地方引用,則變數引用的資料將被刪除。

myNode = ColorWheelNode();
delete( myNode );

因為myNode 在內部被節點圖(nodegraph)引用(擁有),所以myNode 變數被刪除,但節點沒有被刪除。

deleteAll()

[編輯 | 編輯原始碼]

刪除所有已設定的變數。

請注意,刪除變數並不一定刪除該變數引用的資料。只有當資料沒有在其他地方引用時,該變數引用的資料才會被刪除。

另請參見#delete()

nodegraph()

[編輯 | 編輯原始碼]

返回#Nodegraph 物件。

ColorWheelNode

[編輯 | 編輯原始碼]

建立一個新的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();



addButton( text )

[編輯 | 編輯原始碼]
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;
}

addButton( text, functionHandler )

[編輯 | 編輯原始碼]

示例

function onOkButton()
{
    dialog.close();
}

dialog = Dialog("Downloading update...");
dialog.addButton( "Ok", onOkButton );

setProgress( percent )

[編輯 | 編輯原始碼]

進度值需要在 0 到 1 之間。要隱藏進度條,請設定一個負值 (< 0)。要顯示正在執行的進度,請設定一個大於 1 的值 (> 1)。

setTitle( title )

[編輯 | 編輯原始碼]

設定空文字以隱藏

setText( text )

[編輯 | 編輯原始碼]

設定空文字以隱藏

僅在單擊按鈕時返回。返回值是所單擊按鈕的索引。

關閉並隱藏對話方塊。


cd( dirName )

[編輯 | 編輯原始碼]

進入目錄 dirName。如果成功則返回 true。

exists( name )

[編輯 | 編輯原始碼]

name 是一個檔案或目錄名稱。如果檔案/目錄存在則返回 true。

size( name )

[編輯 | 編輯原始碼]

返回給定檔案 name 的檔案大小。如果檔案不存在則返回 -1。

delete( name )

[編輯 | 編輯原始碼]

刪除具有給定 name 的檔案或目錄。

makeDir( name )

[編輯 | 編輯原始碼]

建構函式

  • Download( dir, url )

開始將指定的 url 下載到給定的 dir

progress()

[編輯 | 編輯原始碼]

返回以位元組為單位的已下載資料大小。

返回一個整數,可以是 1、2 或 3

  1. 正在進行中
  2. 已完成
  3. 失敗

取消正在執行的下載。


FootageNode

[編輯 | 編輯原始碼]

建構函式

[編輯 | 編輯原始碼]
  • FootageNode( source )
  • FootageNode( source, pos, name )

source 是一個影片檔名或影像檔名的列表(影像序列)。pos 是一個包含 2 個數字的向量。

node = FootageNode( "C:\MyVideos\sun.mp4" );

另請參見 Node 類

Move2DNode

[編輯 | 編輯原始碼]

建構函式

[編輯 | 編輯原始碼]
  • Move2DNode()
  • Move2DNode( name, pos )

建構函式 Move2DNode() 在節點圖中新增一個新的 Move2D 節點。節點的名稱和位置將自動填充。

建構函式 Move2DNode( name, pos ) 在節點圖中新增一個新的 Move2D 節點,該節點具有給定的 name 並在給定的 pos 處。此建構函式用於儲存和恢復節點圖。


節點圖

[編輯 | 編輯原始碼]

nodegraph() 函式 返回一個 Nodegraph 物件。

setTranslation( x, y )

[編輯 | 編輯原始碼]

將節點圖檢視平移到位置 x,y

Node 是所有 Mewa 節點的基類,例如 #FootageNode#ShaderNode


setName( name )

[編輯 | 編輯原始碼]

將給定的 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]

控制元件是用於更改著色器程式中輸入變數值的圖形小部件。有三種不同的控制元件型別

預設情況下,控制元件將顯示變數的名稱作為文字標籤。可以透過函式修改標籤文字

  • setName( name )

控制元件名稱在節點內應唯一,因為name可用於控制元件搜尋。

addFloatControl( variableName , defaultValue )

[edit | edit source]

在節點[Mewa_User%27s_Guide/Using_the_Node_Graph | 節點面板]中新增一個 GUI 控制元件以更改著色器程式中給定變數的值。

variableName是要控制的著色器原始碼中變數的名稱。

File:FloatControl.png
浮點控制

返回一個#FloatControl物件。

addVec2Control( variableName, defaultValues )

[edit | edit source]
File:Vec2Control.png
Vec2 控制

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 options
setRenderArea 選項


  • setRenderArea("iResolution") 使用setRenderArea("iResolution")的節點示例是以太。此示例使用傳遞到mainImage( out vec4 fragColor, in vec2 fragCoord )fragCoord的輸入座標來生成過程影像。因為“iResolution”選項使用始終從 0 到 1 的fragCoord值填充整個視口,所以此選項主要用於生成影像。
  • setRenderArea("iChannel0") 使用setRenderArea("iChannel0")的節點示例是HexPixelateiChannel0選項會自動為節點新增一個輸入埠。連線輸入影像。傳遞到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。

ColorControl

[編輯 | 編輯原始碼]
顏色控制

建立一個以紅色初始化的顏色控制。uColor 是 glsl 著色器程式碼中 vec3 統一變數的名稱。

parameter = node.addColorControl("uColor", 0.8, 0.2, 0.2 );

顏色控制有 3 個引數,每個顏色通道一個。

setName( name )

[編輯 | 編輯原始碼]

設定此控制元件的名稱。name 在控制元件中顯示為文字標籤。

另見 控制元件部分.

FloatControl

[編輯 | 編輯原始碼]

以下程式碼取自 Ether.mw,展示了 FloatControl 的使用方法。函式 addFloatControl 建立一個控制元件,將其新增到節點面板並返回控制元件以進行進一步設定。

parameter = node.addFloatControl("uDelta", 2.5);
parameter.setName("Delta");
parameter.setStep(0.01);
parameter.setRange(-2, 7);

setRange( min, max )

[編輯 | 編輯原始碼]

設定引數可以具有的最小值和最大值。要停用最小值和最大值,使 UI 控制可以達到任何值,請為最小值和最大值設定相同的值 (min == max)。

setStep( increment )

[編輯 | 編輯原始碼]

調整步長值,使引數隨滑鼠移動更快或更慢地增加。

setName( name )

[編輯 | 編輯原始碼]

設定此控制元件的名稱。name 在控制元件中顯示為文字標籤。

控制元件名稱在節點內應唯一,因為name可用於控制元件搜尋。


Vec2Control

[編輯 | 編輯原始碼]

setName( name )

[編輯 | 編輯原始碼]

設定此控制元件的名稱。name 在控制元件中顯示為文字標籤。

另見 #控制元件.

華夏公益教科書