美文网首页
Houdini VEX(十七)自定义函数

Houdini VEX(十七)自定义函数

作者: Joe_Game | 来源:发表于2019-08-08 21:21 被阅读0次

一、自定义函数的目的:把我们常用的一些代码打包起来

  • 示例:
/*
function 关键词 可加可不加
float 是该函数的返回类型,如果返回类型是void,代码中不需要return
mydot 是函数名字
a,b 是函数参数(由用户提供) 
vector 是参数类型,相同类型可用逗号隔开;
                 不同类型必须用分号,比如(vector a;float b)
const意味着只读 不可写
*/
function float mydot(const vector a,b)
{
    float c = a.x*b.x + a.y*b.y + a.z*b.z;
    return c;//必须有return关键词,返回浮点c
    //如果返回类型是void,不需要return
}
//函数重载,相同函数名下,可以有不同的参数类型和不同的返回类型
function float mydot(const vector2 a,b)
{
    return a.x*b.x + a.y*b.y;//return一个式子,式子计算结果是浮点
}
//@Cd = mydot({0,1,0},@N);
//@Cd = dot({0,1,0},@N);

vector2 pos = set(@P);//set函数将三维变量转为二维
@Cd = mydot({1,0},pos);
//可以有多个return关键词
function int mymax( const int a,b)
{
    //a*=2; //这样做会报错,因为const int b只能读不能写
    if(a>=b)
        return a;
    else
        return b;
}
int c = 10;
printf('%s\n',mymax(c,2));
printf('%s\n',c);
//参数always passed by reference,总是引用,不是拷贝
//意味着如果在函数中修改了参数变量,这个变量就改变了
//为了避免意外地改变参数,可以加上const关键词
function void acrossb(vector a;const vector b)
{
    //自定义函数里面可以使用vex自带函数
    //a = set(a.y*b.z-a.z*b.y, a.z*b.x-a.x*b.z, a.x*b.y-a.y*b.x);
    //自定义函数里面还可以再次自定义函数[nested function]
    function vector myset(const float a,b,c)
    {
        vector result = 0;
        result.x = a;
        result.y = b;
        result.z = c;
        return result;
    }
    a = myset(a.y*b.z-a.z*b.y, a.z*b.x-a.x*b.z, a.x*b.y-a.y*b.x);
}
@N = @P;
//@N = cross({0,1,0},@N); //vex自带cross不修改参数,而是返回向量
//acrossb({0,1,0},@N); //不能改变纯数值
acrossb(@N, {0,1,0}); //改变了@N

相关文章

网友评论

      本文标题:Houdini VEX(十七)自定义函数

      本文链接:https://www.haomeiwen.com/subject/trifjctx.html