Run Over: Primitives
Creates helix curves around primitives
#define PI 3.1415926535897932384
int numCurves = 3;
float time = 0;
int pts [] = primpoints(0, @primnum);
for(int i=0; i<numCurves; ++i)
{
int prim = addprim(0, "polyline");
foreach(int pt; pts)
{
vector N = point(0, "N", pt);
vector tangentu = point(0, "tangentu", pt);
vector tangentv = point(0, "tangentv", pt);
vector P = point(0, "P", pt);
float u = point(0, "u", pt);
float uold = u;
uold = chramp("ends", uold);
float randRev = radians(fit01(rand(i+745),-90,90));
randRev = randRev == 0 ? 1 : randRev;
u = fit01(u, -PI, PI) * ch("revolutions");
vector pos = set(sin(u-time+fit01(rand(i),0,360)), cos(u-time+fit01(rand(i+414),-360,360)), 0) * fit01(chramp("scaleDistrib", rand(i+979)), 0.3, 1.2);// *fit01(rand(i+@ptnum+979), 0.8, 1.2);
matrix3 t = set(tangentu, N, tangentv);
matrix3 tm = ident();
rotate(tm, 90, set(0,1,0));
vector p = P + (pos *tm*t);
p = lerp(p, P, uold);
int ptn = addpoint(0, p);
addvertex(0, prim, ptn);
addpointattrib(0, "curveId", 0);
addpointattrib(0, "originalPrim", 0);
setpointattrib(0, "curveId", ptn, @primnum+i+1);
setpointattrib(0, "originalPrim", ptn, @primnum);
setpointattrib(0, "start", ptn, @primnum);
setpointattrib(0, "end", ptn, @primnum);
}
}
removeprim(0, @primnum, 1);
//rotate around another curve run over points
#define PI 3.1415926535897932384
int numCurves = 3;
float time = 0;
int pts [] = primpoints(0, @primnum);
for(int i=0; i<numCurves; ++i)
{
int prim = addprim(0, "polyline");
foreach(int pt; pts)
{
vector N = point(0, "N", pt);
vector tangentu = point(0, "tangentu", pt);
vector tangentv = point(0, "tangentv", pt);
vector P = point(0, "P", pt);
float u = point(0, "u", pt);
float uold = u;
uold = chramp("ends", uold);
float randRev = radians(fit01(rand(i+745),-90,90));
randRev = randRev == 0 ? 1 : randRev;
u = fit01(u, -PI, PI) * ch("revolutions");
vector pos = set(sin(u-time+fit01(rand(i),0,360)), cos(u-time+fit01(rand(i+414),-360,360)), 0) * fit01(chramp("scaleDistrib", rand(i+979)), 0.3, 1.2);// *fit01(rand(i+@ptnum+979), 0.8, 1.2);
matrix3 t = set(tangentu, N, tangentv);
matrix3 tm = ident();
rotate(tm, 90, set(0,1,0));
vector p = P + (pos *tm*t);
p = lerp(p, P, uold);
int ptn = addpoint(0, p);
addvertex(0, prim, ptn);
addpointattrib(0, "curveId", 0);
addpointattrib(0, "originalPrim", 0);
setpointattrib(0, "curveId", ptn, @primnum+i+1);
setpointattrib(0, "originalPrim", ptn, @primnum);
setpointattrib(0, "start", ptn, @primnum);
setpointattrib(0, "end", ptn, @primnum);
}
}
removeprim(0, @primnum, 1);