一、基本变量
如图,可以理解其实wrangle里的代码本身就在一个for循环里面,所以其实是操作一个子函数,这个概念很重要!
detail 的话,只运行一次
切线
vector A1 = point(0,"P",@ptnum);
vector A2 = point(0,"P",@ptnum-1);
@N = cross(@N, A1 - A2) * 30;
拼接向量
set(i.x, i.y) // {x,y} => vector2
Tips
可以看到vop其生成的代码
根据两个点画线
removeprim(geoself(), @primnum, 1);
vector c1 = getpointbbox_center(0);
int pt0 = addpoint(0, c1 + set(0, 4, 0));
int pt1 = addpoint(0, c1 - set(0, 4, 0));
addprim(0, "polyline", pt0, pt1);
缩写
https://www.it610.com/article/1293836798295875584.htm
移除不必要的点
facet1 选 unique
int pts[] = nearpoints(0,@P,0.01);
if(len(pts) > 1)
{
removepoint(0,@ptnum);
}
随机模型
https://www.youtube.com/watch?v=SVRk3sxzpLU
注意 最好是6个输入
随机数
@a = rand(@ptnum) * 3 + 1;
printf("%d \n", @a);
查看unity HDA节点内容
Unity实例化节点
https://www.sidefx.com/forum/topic/38973/
法线奇怪的问题
模型合并后法线需要重新计算,加个normal节点就好
把polygon转换为point
两个点随机一个且不能重复某一个
https://forums.odforce.net/topic/27103-acess-previous-point-attribute-in-wrangle/
第一个wrangle
i@roof_extra = int(rand(@ptnum + ch("seed")) * 2);
这里随机种子可以增加一个参数,不然随机的不明显(可以是一个可手动调的值)
int(rand(@ptnum * ch("../sort1_window/pointseed")) * 8 + 1)
第二个wrangle
int a = point(0, "roof_extra",@ptnum);
int b = point(0, "roof_extra",@ptnum-1);
if(a == b && a == 1)
{
@roof_extra = 0;
// printf("%d %d |", a, b);
}
简单逻辑
要在一个wrangle里做,不然会出问题
if(hasattrib(0, "prim", "chimney"))
{
@group_delete = 1&@group_roof_extra2;
// printf("%d ",@ptnum);
}
else
{
@group_delete = 0&@group_roof_extra2;
}
通过VEX打组
有例子,很好理解,没事可以下拉节点列表查看一下
添加射线可视化
int points[];
points[0] = addpoint(0, @P);
points[1] = addpoint(0, @P + chv("direct") * ch("scale"));
int l = addprim(0, "polyline", points);