日本艺术家ひさだん的开源作品,代码如下👇
float r, p, d=500, t;
void setup() {
size(800, 800, P3D);
}
void draw() {
background(#F0E0D0);
noStroke();
fill(0, 30);
camera(900, 800, 700, 0, 0, 0, 0, 0, -1);
for (r=0; r<TAU; r+=PI/99) {
for (p=0; p<PI; p+=PI/99) {
push();
rotateX(r);
rotateY(p);
translate(d*sin(r)*cos(p+t), d*cos(r)*cos(p), d*sin(p+t));
box(30);
pop();
}
}
t+=PI/250;
}
讲解👇
变量声明:
float r, p, d = 500, t;
声明了四个浮点数变量:
r
(圆周角),p
(极角),d
(距离,初始化为500),和t
(时间变量)。
设置函数 setup()
:
void setup() {
size(800, 800, P3D);
}
setup()
函数用于初始化设置,这里设置窗口的大小为800x800,并使用P3D模型以支持3D绘图。
绘图函数 draw()
:
void draw() {
background(#F0E0D0);
noStroke();
fill(0, 30);
camera(900, 800, 700, 0, 0, 0, 0, 0, -1);
draw()
函数会不断被调用,负责绘制每帧的内容。background(#F0E0D0);
设置背景颜色。noStroke();
不绘制形状的边框。fill(0, 30);
设置形状的填充颜色为半透明黑色。camera(900, 800, 700, 0, 0, 0, 0, 0, -1);
设置相机的位置和朝向。
嵌套循环:
for (r = 0; r < TAU; r += PI / 99) {
for (p = 0; p < PI; p += PI / 99) {
外层循环通过
r
控制圆周角的变化(从0到两个PI),内层循环通过p
控制极角的变化(从0到PI),以便生成一个三维空间中的点。
绘制盒子:
push();
rotateX(r);
rotateY(p);
translate(d * sin(r) * cos(p + t), d * cos(r) * cos(p), d * sin(p + t));
box(30);
pop();
push();
和pop();
用于保存和恢复坐标系统的状态。rotateX(r);
和rotateY(p);
分别根据角度r
和p
旋转坐标系。translate(...)
根据计算的位置在3D空间中平移(应用圆和极坐标)。box(30);
在当前坐标绘制一个边长为30的立方体。
时间变量更新:
t += PI / 250;
每帧结束后,时间变量
t
递增,使得在下一帧中,t
会影响位置的计算,从而产生时间变化的效果。
整体来看,这段代码实现了一个动态的3D立方体展示,显示在一个3D空间中,随着时间的推移,立方体的位置不断变化。
如果对这种生成艺术感兴趣,欢迎关注我的Processing课程
我们的工作是探索编程和数学在艺术和设计中一切可能性,形式不限,艺术创作,跨界合作,展览展示,品牌活动等等。位于大洋彼岸的洛杉矶,我们的使命是建设和维护全球华人创意编程和算法艺术社群,形式有开展线上教学,举办社群活动,策划举办艺术展览,挖掘发现本地社群里值得被传播的人和事通过自媒体进行传播。
我们建了一个读者群
想进群和其他读者进行精神交流朋友
加联系微信(推送末尾)
联 系 我 们
探索数学与编程在设计与艺术中一切之可能
用运算和美学让你变更酷
主营业务
科学艺术咨询 | 公共艺术 | 未来舞台美术 | 大数据可视化 | 设计人才猎头 | 品牌Event | 教育