唔記得左
仲有code.
用返houdini solver node
對比prev-frame同current frame
容易控制同visualize D.
int currentPt = -1;
int nextPt = -1;
int lastPt = point(1, "id", 0);
if (@group_current == 1) {
currentPt = @ptnum;
}
if (npointsgroup(0, "available") > 0) {
int nPts[] = nearpoints(0, "available" , @P, 3.1);
if (len(nPts) > 0){
if(@ptnum == currentPt) {
nextPt = nPts[floor(rand(@Frame*chi("seed")) * len(nPts))];
}
if (@group_visited == 0) {
push(i[]@stack, lastPt);
}
} else {
// backtrack;
if(@group_current == 1) {
nextPt = pop(i[]@stack);
}
}
}
vector currentPos, nextPos;
currentPos = point(0, "P", currentPt);
nextPos = point(0, "P", nextPt);
vector direction = normalize(nextPos - currentPos);
if (direction == set(-1,0,0)) {
setpointattrib(0, "left", currentPt, 0, "set");
setpointattrib(0, "right", nextPt, 0, "set");
}
if (direction == set(1,0,0)) {
setpointattrib(0, "right", currentPt, 0, "set");
setpointattrib(0, "left", nextPt, 0, "set");
}
if (direction == set(0,0,-1)) {
setpointattrib(0, "top", currentPt, 0, "set");
setpointattrib(0, "bottom", nextPt, 0, "set");
}
if (direction == set(0,0,1)) {
setpointattrib(0, "bottom", currentPt, 0, "set");
setpointattrib(0, "top", nextPt, 0, "set");
}
setpointgroup(0, "current", currentPt, 0, "set");
setpointgroup(0, "current", nextPt, 1, "set");
setpointgroup(0, "available", currentPt, 0, "set");
setpointgroup(0, "available", nextPt, 0, "set");
setpointgroup(0, "visited", currentPt, 1, "set");
setpointgroup(0, "visited", nextPt, 1, "set");