您当前的位置: 首页 >  flashinggg

Houdini湖边小屋-屋顶面片划分详细过程记录

flashinggg 发布时间:2022-02-22 19:27:39 ,浏览量:1

b站UP主七里雪凝的湖边小屋教程——P3【Houdini】萌新的《湖边小屋》教程拆解与实现,殊途同归!_哔哩哔哩_bilibili

目录

内容概括

VEX代码

VEX代码详细理解

内容概括

make_ceiling这一部分主要是将面能合并的都合并起来,用到了For-loop with Feedback 循环节点,attributewrangle来输入VEX进行程序化操作。

VEX代码
int merge_queue[];
int primnum,share_prim,prim_hedge,equiv_hedge,next_hedge; 

merge_queue=expandprimgroup(0,"ceiling");
while(len(merge_queue)){
  primnum=pop(merge_queue, 0);
  prim_hedge=primhedge(0,primnum);
  next_hedge=prim_hedge;
  do{
    equiv_hedge=hedge_nextequiv(0,next_hedge);
    if(equiv_hedge!=next_hedge){
      share_prim=hedge_prim(0,equiv_hedge);
      if(removevalue(merge_queue,share_prim)){
        removeprim(0,primnum,1);
        if(hedge_srcpoint(0,equiv_hedge)==hedge_srcpoint(0,next_hedge)){
          setprimvertex(0,-1,hedge_srcvertex(0,equiv_hedge),hedge_presrcpoint(0,next_hedge));
          setprimvertex(0,-1,hedge_dstvertex(0,equiv_hedge),hedge_postdstpoint(0,next_hedge));
        }else{ 

           setprimvertex(0,-1,hedge_srcvertex(0,equiv_hedge),hedge_postdstpoint(0,next_hedge));
           setprimvertex(0,-1,hedge_dstvertex(0,equiv_hedge),hedge_presrcpoint(0,next_hedge));
        }
        break;
      }
      }
      next_hedge=hedge_next(0,next_hedge);
    }while(next_hedge!=prim_hedge);
  }
VEX代码详细理解
//创建所需变量
int merge_queue[];
int primnum,share_prim,prim_hedge,equiv_hedge,next_hedge; 

merge_queue=expandprimgroup(0,"ceiling"); //取出ceiling组的所有面并组成数组
while(len(merge_queue)){ //循环判断标准是面数组的长度
  primnum=pop(merge_queue,0); //取出面数组的第0个也就是第一个面,且把这个面在这个数组中删除
  prim_hedge=primhedge(0,primnum); //任意取出这个面的一半边
  next_hedge=prim_hedge; //命名
  do{ //再做一个循环
    equiv_hedge=hedge_nextequiv(0,next_hedge); //取等价的半边
    if(equiv_hedge!=next_hedge){ //判断是否是内部边,因为如果是边界边则==成立
      share_prim=hedge_prim(0,equiv_hedge); //得到equiv_hedge所属于的面
      if(removevalue(merge_queue,share_prim)){//从面的数组中找到share_prim面并删除,如果找到就返回1,找不到返回0
        removeprim(0,primnum,1); //从几何体中删除原始的面1,后面的数字“1”表示同时删除面上的与其他面无关联的点
        if(hedge_srcpoint(0,equiv_hedge)==hedge_srcpoint(0,next_hedge)){//情况1-下图左
          //equiv_hedge起点 移动到 next_hedge前一个边起点 
          //equiv_hedge终点 移动到 next_hedge后一个边终点
          setprimvertex(0,-1,hedge_srcvertex(0,equiV_hedge),hedge_presrcvertex(0,next_hedge));
          setprimvertex(0,-1,hedge_drtvertex(0,equiv_hedge),hedge_postdstvertex(0,next_hedge));
        }else{ //情况2-下图右
           //equiv_hedge起点 移动到 next_hedge下一个边终点
           //equiv_hedge终点 移动到 next_hedge前一个边起点
           setprimvertex(0,-1,hedge_srcvertex(0,equiv_hedge),hedge_postdstvertex(0,next_hedge));
           setprimvertex(0,-1,hedge_dstvertex(0,equiv_hedge),hedge_presrcvertex(0,next_hedge));
        }
        break;
      }
      }
      next_hedge=hedge_next(0,next_hedge);
    }while(next_hedge!=prim_hedge);
  }

关注
打赏
1688896170
查看更多评论

flashinggg

暂无认证

  • 1浏览

    0关注

    83博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0472s