Paladinka

Paladinka 

Houdini Technical Artist

2subscribers

89posts

Кринолин и VEX. Attribute wrangle 1,2,3

Attribute wrangle 1
int pts_per_ring = chi("points_per_ring"); 
int ring_count = chi("ring_count");
float radius_bottom = chf("radius_bottom"); 
float radius_top = chf("radius_top");
float height = chf("height");
float ring_step = height / (ring_count - 1);
for (int ring = 0; ring < ring_count; ring++) {
       float y = ring * ring_step;
       float radius = lerp(radius_bottom, radius_top, float(ring) / (ring_count - 1));
       for (int i = 0; i < pts_per_ring; i++) {
             float angle = 2 * M_PI * i / pts_per_ring;
             vector pos = set(cos(angle)*radius, y, sin(angle)*radius);
             int pt = addpoint(0, pos);
            vector clr = set(float(ring) / (ring_count - 1), 1.0 - float(ring) / (ring_count - 1), 0);
            setpointattrib(0, "Cd", pt, clr, "set");
      }
}
Attribute wrangle 2
int pts_per_ring = chi("points_per_ring");
int ring_count = chi("ring_count");
int pt = @ptnum;
int ring = int(pt / pts_per_ring);
int i_in_ring = pt % pts_per_ring;
if (ring < ring_count - 1) {
    int next_pt = pt + pts_per_ring;
    int prim = addprim(0, "polyline", pt, next_pt);
    setprimattrib(0, "Cd", prim, set(0, 0.7, 1.0), "set"); // голубой цвет
}
Attribute wrangle 3
int pts_per_ring = chi("points_per_ring");
int pt = @ptnum;
int ring = int(pt / pts_per_ring);
int i_in_ring = pt % pts_per_ring;
int next_in_ring = ring * pts_per_ring + (i_in_ring + 1) % pts_per_ring;
int prim = addprim(0, "polyline", pt, next_in_ring);
setprimattrib(0, "Cd", prim, set(1, 0.4, 0), "set"); // оранжевый цвет
Go up