为了跟进我的第一篇博客文章,我想学习如何通过一种编码语言实际制作某种视觉艺术。 在对该主题进行了一些研究之后,我发现了一个名为Processing的程序,该程序允许其用户精确地执行此操作。 这绝不是深入的教程,而是我探索该主题的经验。
What is Processing?
Processing是由MIT研究生Ben Fry和Casey Reas创建的一种开源软件程序,其最初设计是围绕视觉艺术环境中的编码学习。 该程序提供了一个集成开发环境(IDE),它能够运行代码并在数字素描簿上显示结果。 尽管可以将处理本身视为一种编程语言,但是在大多数情况下,它使用Java语言。 但是,该程序允许用户将模式更改为其他语言,例如Javascript或Python。
The Canvas
开始项目前要考虑的一个重要细节是了解您的画布。 计算机上的画布本质上是一个坐标系统,其点被分配给屏幕上的像素。 但是,与传统坐标系不同,该坐标系从左上角的(0,0)开始。 要设置此画布的大小,该函数尺寸(x,y)用过,够容易吧?
Basic Shapes
我发现用代码制作艺术的一个很好的起点是熟悉四种基本形状。 这些是点,线,矩形和椭圆形。 尽管这看起来并不多,但我仅通过使用这四种形状实际上能做多少就感到惊喜。 这些形状中的每一个都有函数,这些函数将画布的坐标点作为参数来指定它们的显示位置。 这些功能是:
点(x,y) 线(x1,y1,x2,y2) rect(x,y,width,height) 椭圆(x,y,宽度,高度)
Static vs. Interactive
您可以通过编码制作两种类型的草图。 一个是静态的,另一个是交互式的。 静态草图是通过一系列功能创建的,这些功能可以创建一个单独的静止图像。 没有与此类型相关联的动画,并且不需要与查看者进行任何交互。 另一方面,交互式草图是通过一系列框架制作的,并且像名称状态一样,允许查看者与其交互。 大多数时候这些都是动画的。
这是我根据Piet Mondrian的画作及其代码建模的静态素描的示例。
size(500, 500);
background(255);
fill(255, 0, 0);
strokeWeight(6);
rect(0, 0, 215, 215);
fill(255);
strokeWeight(6);
rect(215, 0, 285, 215);
fill(255);
strokeWeight(8);
rect(0, 215, 215, 110);
fill(255);
strokeWeight(8);
rect(215, 215, 285, 110);
fill(255, 255, 0);
strokeWeight(6);
rect(0, 325, 50, 175);
fill(255);
strokeWeight(6);
rect(50, 325, 165, 175);
fill(0, 0, 255);
strokeWeight(6);
rect(215, 325, 150, 150);
fill(255);
strokeWeight(6);
rect(215, 475, 150, 25);
fill(255);
strokeWeight(6);
rect(365, 325, 135, 175);
Setup and Draw
编写静态草图非常简单,您只需编写将运行一次并生成静止图像的代码行。 交互式草图需要更多的组织。 这是哪里无效setup()和无效draw()参加进来。 就像名称状态一样,在void setup中,您可以编写代码来设置所有内容,例如画布的大小。 设置块中的每一段代码在开始时仅运行一次。 至于绘制块中的所有代码,这些代码会不断循环,从而产生动画。
接下来的两幅图像是我与用于创建它们的代码一起制作的交互式草图的示例。
void setup() {
size(750, 750);
background(0);
}
void draw() {
if (mousePressed) {
background(0);
}
stroke(random(0,255), random(0,255), random(0,255));
line(mouseX, mouseY, 375, 375);
}
void mousePressed(){
saveFrame();
}
上面的图像明显不同,但是它们是使用相同的代码制作的。 通过将线条的x和y坐标设置为鼠标光标所在的位置,我能够与程序进行交互,并根据鼠标的移动方式产生不同的结果。 我还添加了单击鼠标的功能,该功能可以将画布重置为空白面板,并在擦除之前立即捕获图像。
Takeaways
与该程序交互时,我真的很享受这样一个事实:它不需要花太多的钱就可以在屏幕上产生可见的结果。 看到我编写的代码如何转换为可视图像很有趣。 尽管我在这个主题上有丰富的经验,但是看到其他人的作品使我意识到我只是从头开始。 展望未来,我希望我将能够学习更多有关整体编码的知识,以便最终将这些知识应用于制作更复杂的作品。