【学习笔记】houdini使用vex构建多边形和线(模拟connect adjecent piece节点效果)
—— 微资讯 · 微课程 ——
利用零碎时间,走上超神之路!

小编导语
通过这个教程学习了houdini是如何通过point,vertex和prim来构建几何体,了解点的顺序,法线正方与vertex的作用;学习了4个常用的vex语言函数,并且从底层模拟了connect adjacent piece节点的效果;
视频教程
学习笔记
01houdini关于点线面构成原理讲解

需要有一个点阵列
| 序号 | 坐标 |
| 0 | {0,1,0} |
| 1 | {1,1,0} |
| 2 | {1,0,0} |
| 3 | {0,0,0} |
prim 类型
polyline 不封闭:形成线
poly:封闭 形成面
点与prim通过vertex进行连接
| prim | 点排列顺序 |
| 0 | 0,1,2,3 |
| 0* | 0,3,4,1 |
点连接的顺序决定了法线的方向
02在houdini中使用pointwrangle完成上面的理论分析
使用pointwrangle节点
注意
默认没有模型接入,需要使用detail层级才能生成点(其他层级默认是对输入端模型处理)

第一步创建point
使用函数 int addpoint(int geohandle,vector pos)
返回的是一个整形:点的序号,参数是 节点如输入端,默认为0+矢量位置信息;
int pnt0=addpoint(0,{0,0,0});
int pnt1=addpoint(0,{1,0,0});
int pnt2=addpoint(0,{1,1,0});
int pnt3=addpoint(0,{0,1,0});
这样我们就创建四个点
第二步,创建空的prim几何体
函数 int addprim(int geohandle,string type)
返回整形 面的序号,参数是 输入端点,默认为0+需要的prim的类型:poly还是polyspline
第三步 通过vertex把point 按顺序加载到prim中
函数 int addvertex(int geohandle,int prim,int point)
返回整形 顶点的序号,参数是 输入端点,默认为0+添加prim+对应的点;
int vertex0=addvertex(0,prim0,pnt1);
int vertex1=addvertex(0,prim0,pnt2);
int vertex2=addvertex(0,prim0,pnt3);
int vertex3=addvertex(0,prim0,pnt4);
结果

03基于模型satter撒点后的处理


第一步:活动半径以内的周围点数组(在search radius半径之内相邻的点)
函数int [] nearpoints(string geometry,vector pt,float maxdist)
返回的是一个整形数组,参数是需要控制的几何体,默认是第一个输入端0,点的位置,还有查找半径;
float sarchad=ch("searchad");//自定义一个半径控制变量;
int nearpnts[]=nearpoints(0,@P,searchad);//通过函数活动半径范围内的返回的点组;
foreach(int pnt; nearpnts){
int line=addprim(0,"polyline");//创建prim,类似为polyline先类型
addvertex(0,line,@ptnum);//把节点当前处理的点加到这个prim上
addvetex(0,line,pnt);//把数组中的点加到这个prim上
}
这里有个问题,数组中的点包含了当前处理的点,所以让@ptnum与自己生产面积为0的prim线,需要加一个判定,当数组中pnt与@ptnum不相等的时候才连线~
foreach(int pnt; nearpnts){
if(pnt!=@ptnum){
int line=addprim(0,"polyline");//创建prim,类似为polyline先类型
addvertex(0,line,@ptnum);//把节点当前处理的点加到这个prim上
addvetex(0,line,pnt);//把数组中的点加到这个prim上
}
}

最后添加vop节点进行紊乱颜色控制(略)

获得教程的方法:
