目录
在VEX内大多数的工作都是函数调用,且大多数是循环语句(类似其他熟悉的语言如C);类似C和许多其他语言一样,可使用大括号{}包含多个语句,用于选择和循环;
一,选择语句
//选择
if(condition) statement_if_true;
[else if(condition) statement_if_false;]
[else statement_if_false;]
//可直接计算一个语句;
if (condition)
statement;
//也可使用{}计算多个语句;
if (condition)
{
statement1;
statement2;
...
}
二,循环语句
基本常用循环do,for,foreach,while,及其他循环forpoints,illuminace,gather;
do
//do循环,先计算语句,在判断条件
//至少计算一次语句
do statement [while(condition)]
for
//标准C风格的for循环
//执行init语句,然后在判断condition,在每次迭代结束时执行change语句;
for(init; condition; change) statement
//参考C++11范围for
for(element_declaration : sequence) statement
foreach
//针对array中的每个成员value,计算语句;
//可选index,为每次计算的当前位置;
foreach(value; array) statement
foreach(index; value; array) statement
while
//条件condition成立时,循环计算语句;
while(condition) statement
forpoints
用于image3d context,此语境已过时,改用volume;
illuminance
循环场景内的所有光源,为每个光源调用lightshader以设置Cl和L全局变量;
gather
向场景中发射射线ray,并返回被射线击中的surface shader信息;
二,控制语句
return,break,continue;
return
//当遇到return时,退出函数;
int max(int a, b)
{
if (a > b)
return a;
return b;
}
break
//当遇到break时,立即退出整个循环;
for (int i = 0; i < sizes; i++)
{
mixamount += getAmount(roughness);
if (mixamount > 1) {
break;
}
}
continue
//当遇到continue时,立即跳到下次迭代循环;
foreach (x; myarray)
{
if (x < 10) continue;
...
}
三,打印语句
类似其他一些语言如python,VEX使用printf函数;
//语法格式
void printf(string format, ...)
格式化字符串时C printf格式化字符串的简单版本;当在字符串内发现%时,其后参数字符将以指定格式打印,由单个字符指定如:g、f、s、d、x、c、p;
- %g、%p、%c
- 以通用形式,打印integer float, vector, vector4, matrix3, matrix or string;
- %f、%e、%E
- 以浮点形式,打印float, vector, vector4, matrix3 or matrix;
- %s
- 打印字符串;
- %d、%i
- 以十进制形式,打印整数变量;
- %x、%X
- 以十六进制形式,打印整数变量,值需以0x为前缀(如0x42);
- %o
- 以八进制形式,打印整数变量;
- %%
- 打印百分号;
还有可选的字符作为格式化输出的前缀,通常前缀的形式为[flags][width][.precision][format]:
- flags
- -,结果左对齐;
- +,对数字则添加+前缀,对字符串会添加双引号;
- 0,使用前导0填充;
- width
- 宽度,如是*,则为参数列表的下一个值;
- precision
- 精度,如是*,则为参数列表的下一个值;
printf("P = %g, dot(N, P) = %g, %d = %x\n", P, dot(N, P), ptnum, ptnum);
printf("RGB = {%g,%g,%g}\n", clr.r, clr.g, clr.b);
printf("P = %20s\n", "20 chars");
printf("%-+20s\n", "Left justified and quoted");
printf("%+08.3g\n", velocity);
printf("%*.*g\n", width, precision, value);
Cf = texture(sprintf("/maps/map%d.rat", i));
Cf = texture(sprintf("/maps/map%04d.rat", i));