【学习笔记】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节点进行紊乱颜色控制(略)

获得教程的方法:

(0)

相关推荐