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

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);
  }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九九345

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值