Houdini脚本Vex学习

Vex前言

Vex是Houdini的控制脚本, 语法类似C/C++, 能方便编写出操控几何数据的程序.

八面体阵列程序

 

void add_pyramid(vector pos)
{
    int p0 = addpoint(0, pos + {1, 0, 1});
    int p1 = addpoint(0, pos + {1, 0, -1});
    int p2 = addpoint(0, pos + {-1, 0, 1});
    int p3 = addpoint(0, pos + {-1, 0, -1});
    int p4 = addpoint(0, pos + {0, 1.5, 0});
    int p5 = addpoint(0, pos + {0, -1.5, 0});

    addprim(0, "poly", p2, p4, p0);
    addprim(0, "poly", p0, p4, p1);
    addprim(0, "poly", p1, p4, p3);
    addprim(0, "poly", p3, p4, p2);
    addprim(0, "poly", p0, p5, p2);
    addprim(0, "poly", p1, p5, p0);
    addprim(0, "poly", p3, p5, p1);
    addprim(0, "poly", p2, p5, p3);
}

int row = chi("row");
int colume = chi("colume");

if(row >= 1 && colume >= 1)
{
    for(int x = 0; x < row; ++x)
    {
        for(int y = 0; y < colume; ++y)
        {
            add_pyramid(set(2 * x,  2 * y, 0));
        }
    }
}

 

 猪头涟漪形变

vector inf_pos = point(1, 'P', 0);
float radius = chf("radius");
int handle = pcopen(0, 'P', inf_pos, radius, chi("max_points"));
int ptnum = -1;
float distance = 0.0;
while (pciterate(handle))
{
    pcimport(0, "point:number", ptnum);
    pcimport(0, "point:distance", distance);
    if(distance > radius - chf("threshold"))
    {
        vector pos = point(0, "P", ptnum);
        vector dir = normalize(pos - inf_pos);
        setpointattrib(0, "P", ptnum, pos + dir * chf("push_distance"));
        setpointattrib(0, "Cd", ptnum, {1, 1, 0});
    }
    else 
    {
        setpointattrib(0, "Cd", ptnum, {0, 0, 1});
    }
}

 

 参考资料

https://www.bilibili.com/video/BV1Zp411d7Hw?p=1

 

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值