跳转到内容

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

另见 #控件.

华夏公益教科书