VEX —— 选择与循环

目录

一,选择语句

二,循环语句

do 

for 

foreach 

while 

forpoints

illuminance

gather

二,控制语句

return 

break

continue

三,打印语句


       在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));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值