xxxxxxxxxx
47
function setup() {
createCanvas(400, 400, WEBGL);
angleMode(DEGREES);
}
function draw() {
background(30);
rotateX(60);
noFill();
stroke(255);
// 螺旋生长参数
let maxRadius = 150; // 最大半径
let spirals = 10; // 螺旋的完整圈数
let pointsPerSpiral = 100; // 每圈的点数
let totalPoints = spirals * pointsPerSpiral;
let height = 200; // 螺旋的总高度
beginShape(TRIANGLE_STRIP);
for (var i = 0; i <= totalPoints; i++) {
let angle = map(i, 0, totalPoints, 0, 360 * spirals);
let rad = map(i, 0, totalPoints, 20, maxRadius); // 从内圈到外圈的半径变化
let z = map(i, 0, totalPoints, -height/2, height/2); // 高度变化
let x = rad * cos(angle);
let y = rad * sin(angle);
// 颜色随螺旋高度变化
let r = map(sin(frameCount + z), -1, 1, 100, 200);
let g = map(cos(frameCount + z), -1, 1, 100, 200);
let b = map(sin(frameCount + z), -1, 1, 200, 100);
stroke(r, g, b);
vertex(x, y, z);
// 为形成三角形螺旋,每个点都要稍微偏移
let nextRad = rad * 0.95; // 微小变化以形成三角形
let nextZ = z + (height / totalPoints); // 微小的z轴偏移
let nextX = nextRad * cos(angle + 2); // 小角度增加以形成旋转效果
let nextY = nextRad * sin(angle + 2);
vertex(nextX, nextY, nextZ);
}
endShape();
}