艺术家Koma Tebe的开源作品

时事   2024-11-08 13:57   中国  

艺术家Koma Tebe的开源作品👇

int f = 0;

float r = 88;

void setup() {

size(640, 640, P3D);

}

void draw() {

f++;

background(0);

for (float i = -400; i <= 400; i += 2) {

pushMatrix();

float x = sin(i) * r+width/2;

float y = cos(i) * r+height/2;

fill(255, 125 * tan(i - f / 33.0) + 125);

noStroke();

translate(x, y);

rotateZ(f / 99.0);

torus(44, 1, 3);

popMatrix();

}

}


void torus(float r1, float r2, float detail) {

int numDetail = int(detail);

for (int i = 0; i < numDetail; i++) {

float theta1 = map(i, 0, numDetail, 0, TWO_PI);

float theta2 = map(i + 1, 0, numDetail, 0, TWO_PI);


beginShape(TRIANGLE_STRIP);

for (int j = 0; j <= numDetail; j++) {

float phi = map(j, 0, numDetail, 0, TWO_PI);

float x1 = (r1 + r2 * cos(phi)) * cos(theta1);

float y1 = (r1 + r2 * cos(phi)) * sin(theta1);

float z1 = r2 * sin(phi);

vertex(x1, y1, z1);


float x2 = (r1 + r2 * cos(phi)) * cos(theta2);

float y2 = (r1 + r2 * cos(phi)) * sin(theta2);

float z2 = r2 * sin(phi);

vertex(x2, y2, z2);

}

endShape();

}

}


代码结构分析
  1. 变量声明

    int f = 0;
    float r = 88;
  • f 是一个用于计数的整型变量,初始值为 0,主要用来控制动画的时间和效果。

  • r 是一个浮点变量,表示环的半径,初始值为 88。

  • setup() 函数

    void setup() {
    size(640, 640, P3D);
    }
    • setup() 是在程序开始时运行一次的函数。

    • size(640, 640, P3D) 设置了窗口的大小为 640x640 像素,并使用 P3D 渲染模式,即三维图形渲染。

  • draw() 函数

    void draw() {
    f++;
    background(0);
    • draw() 是一个循环执行的函数,每一帧都会调用。

    • f++ 每次调用 draw() 时将 f 的值加 1。

    • background(0) 将背景色设置为黑色。

  • 绘制环形体

    for (float i = -400; i <= 400; i += 2) {
    pushMatrix();
    float x = sin(i) * r + width / 2;
    float y = cos(i) * r + height / 2;
    fill(255, 125 * tan(i - f / 33.0) + 125);
    noStroke();
    translate(x, y);
    rotateZ(f / 99.0);
    torus(44, 1, 3);
    popMatrix();
    }
    • 通过一个 for 循环,从 -400 到 400 每次增加 2,用于计算环的各个位置。

    • pushMatrix() 和 popMatrix() 用于保存和恢复当前的变换状态,确保每个环的变换不会影响其他环。

    • x 和 y 是根据三角函数计算出的环的位置,偏移量为窗口的中心位置。

    • fill() 设置了填充颜色,颜色值受 tan 函数的影响,从而产生动态变化的颜色效果。

    • noStroke() 表示不绘制形状的边框。

    • translate(x, y) 将坐标系移动到计算得到的位置。

    • rotateZ(f / 99.0) 使得每个环体围绕 Z 轴旋转,旋转的角度与 f 成正比。

    • torus(44, 1, 3) 调用自定义的 torus 函数,绘制一个半径为 44,次要半径为 1,细节为 3 的环形体。

  • torus() 函数

    void torus(float r1, float r2, float detail) {
    int numDetail = int(detail);
    for (int i = 0; i < numDetail; i++) {
    float theta1 = map(i, 0, numDetail, 0, TWO_PI);
    float theta2 = map(i + 1, 0, numDetail, 0, TWO_PI);
    ...
    }
    }
    • torus() 函数用于绘制环形体。

    • r1 是环的主半径,r2 是环的次要半径,detail 表示环的细节程度。

    • 通过嵌套的循环,计算每个点的三维坐标以形成环形体的形状。

    • beginShape(TRIANGLE_STRIP) 和 endShape() 用于绘制三角带,以形成环的表面。

    总结来说,这段代码整体上是一个动态的三维环形体动画,利用三角函数和周期性变化的颜色创建出视觉上动感的效果。


    如果对这种生成艺术感兴趣,欢迎关注我的Processing课程


    我们的工作是探索编程和数学在艺术和设计中一切可能性,形式不限,艺术创作,跨界合作,展览展示,品牌活动等等。位于大洋彼岸的洛杉矶,我们的使命是建设和维护全球华人创意编程和算法艺术社群,形式有开展线上教学,举办社群活动,策划举办艺术展览,挖掘发现本地社群里值得被传播的人和事通过自媒体进行传播。

    我们建了一个读者群

    想进群和其他读者进行精神交流朋友

    加联系微信(推送末尾)

    联 系 我 们

    算法艺术实验室

    探索数学与编程在设计与艺术中一切之可能

    用运算和美学让你变更酷

    主营业务

    科学艺术咨询 | 公共艺术 | 未来舞台美术 | 大数据可视化 | 设计人才猎头 | 品牌Event | 教育

    算法艺术实验室AALab
    探索数学与编程在设计和艺术中的一切可能性
     最新文章