【Houdini】VEX | 自定义细分函数

【Houdini】VEX | 自定义细分函数

【Houdini】VEX | 自定义细分函数

上面for是细分。下面measure是获取面积,再下面是纠正法线

代码

float seed = chf("seed");

int pts[]=primpoints(0,@primnum);

string gp = itoa(@primnum);
vector bbmin = getbbox_min(0,gp);
vector bbmax = getbbox_max(0,gp);

vector bbsize = getbbox_size(0,gp);

int cutdir;

if (bbsize.x > bbsize.z)
    cutdir =0;
else
    cutdir = 1;

float cutpos = fit01(rand(@primnum + seed),0.1,0.9);

// Subdivision
vector cut = lerp(bbmin,bbmax,cutpos);

vector pos;
int newpt;

if (cutdir == 0 ){

   // first quad
   int newprim = addprim(0,"poly");
   pos = bbmin;
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = set(cut.x,bbmin.y,bbmin.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = set(cut.x,bbmin.y,bbmax.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = set(bbmin.x,bbmin.y,bbmax.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

  // second quad
   newprim = addprim(0,"poly");
   pos = set(cut.x,bbmin.y,bbmin.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = set(bbmax.x,bbmin.y,bbmin.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = set(bbmax.x,bbmin.y,bbmax.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = set(cut.x,bbmin.y,bbmax.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);
}else{

// first quad
   int newprim = addprim(0,"poly");
   pos = bbmin;
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = set(bbmin.x,bbmin.y,cut.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = set(bbmax.x,bbmin.y,cut.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = set(bbmax.x,bbmin.y,bbmin.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

  // second quad
   newprim = addprim(0,"poly");
   pos = set(bbmin.x,bbmin.y,cut.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = set(bbmin.x,bbmin.y,bbmax.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = bbmax;
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   pos = set(bbmax.x,bbmin.y,cut.z);
   newpt = addpoint(0,pos);
   addvertex(0,newprim,newpt);

   }

removeprim(0,@primnum,1);

 

给TA充电
共{{data.count}}人
人已充电
HoudiniHoudini文章与视频

【Houdini】VEX | 法线指向一个点

2022-3-1 15:35:50

HoudiniHoudini开发

【Houdini】Python | HOM 介绍

2022-3-2 17:33:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索