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 在控件中显示为文本标签。
另见 #控件.