【翻译】Processing系列|(一)简介及使用方法

下一篇:【翻译】Processing系列|(二)安卓模式的安装使用及打包发布
下下篇:【翻译】 Processing系列|(三)安卓项目构建

考虑到,学习啥都肯定要先读人家的官方文档,笔者把这个系列的第一步设置为官方文档的翻译。这个系列的目的是开发一个安卓程序,所以接下来第二三篇都是安卓程序开发。

原文链接:https://processing.org/tutorials/overview
This tutorial is adapted from the book, Visualizing Data by Ben Fry, O’Reilly 2007. © 2007 Ben Fry. If you see any errors or have comments, please let us know.

译者声明:本篇内容原文来自公开网页,源文档可在Github仓库中找到,满足GNU协议要求,修改后公开。

译者注:译者使用的版本是Windows的Processing 4.3,下载地址是https://github.com/processing/processing4/releases/download/processing-1293-4.3/processing-4.3-windows-x64.zip

Overview(概述)

Processing 是一个简单的编程环境,能够让带有动画交互的可视化应用的开发更加简单,并且开发者能够获得即时反馈。这个产品的开发者,希望能够提供一种使用代码来勾画(sketch)想法的方式。随着产品的不断发展,在过去的数10年里,Processing除了被用于简单的勾画想法,还被进一步的应用在其他更高等级的产品中。最初是作为 Java 针对艺术家和设计师的特定领域扩展而构建的,Processing 已经发展成为一个全面的设计和原型制作工具,可用于大型装置作品、动态图形和复杂的数据可视化。

Processing 基于 Java,但是因为程序的通用性,即使你对Java一无所知,你也可以学习并使用它。

最新的版本可以在这个网页中下载: https://processing.org/download

该项目的一个重要目标是让更多人了解这种编程方式。因此,Processing 是免费下载、免费使用和开源的。使用 Processing 环境和核心库开发的项目可以用于任何目的。这种模式与 GCC(GNU 编译器集)相同。GCC 及其相关库(如 libc)根据 GNU 公共许可证(GPL)开放源代码,该许可证规定对代码的修改必须公开。不过,使用 GCC 创建的程序(例子不胜枚举)本身并不需要开放源代码。

Processing包括以下几个方面:

  • Processing的开发环境(简称PDE)。这是一个双击图标就可以运行的软件。PDE 是一个集成开发环境(IDE),具有一套简约的功能,可作为编程的简单入门或测试一次性想法。
  • 一组函数(也称为命令或方法)构成了 "核心 "编程接口或 API,还有几个库支持更高级的功能,如通过网络发送数据、从网络摄像头读取实时图像以及以 PDF 格式保存复杂图像
  • 语言语法与 Java 相同,但有一些修改。
  • 一个活跃的在线社区,位于 http://processing.org

译者注:在线社区是需要交钱进入的,需信用卡,不是很好进。译者推荐关注一下Processing的样例网站,上面有很多人上传相关的Sketch,就类似于其他代码的Github,网址是https://openprocessing.org/,打开需要耗费一定的时间有点卡,但是渲染完成之后就不卡了。
在这里插入图片描述

因此,"Processing "的提法可能有些含糊不清。我们指的是应用程序接口、开发环境还是网站?在本文中,我们在提及每一种情况时都会小心谨慎。

Sketching with Processing(用Processing做草图)

译者注:草图部分对译者来说太过简单,不推荐通过文字感受,而是推荐直接看相关视频,因此这里使用机翻简单翻译两段。

Processing 程序被称为草图。其目的是让 Java 风格的编程感觉更像脚本,并采用脚本编写过程来快速编写代码。草图存储在 "草图本 "文件夹中,该文件夹是保存所有项目的默认位置。可通过文件 → 草图本访问存储在草图本中的草图。另外,还可以使用文件 → 打开…打开系统中其他位置的草图。

高级程序员无需使用 PDE,可以选择在 Java 环境中使用其库。不过,如果你刚刚入门,建议在最初的几个项目中使用 PDE,以熟悉工作方式。虽然 Processing 是基于 Java 的,但它绝不是一个带训练轮的 Java IDE。为了更好地迎合我们的目标用户,Processing 的概念模型(程序如何运行、接口如何构建以及文件如何处理)与 Java 有些不同。

Hello world and Hello mouse(开始第一个草图)

译者注:翻译略。可参考视频:二锅头【Processing零基础中文教程】1、入门篇(艺术生适用)

Exporting and distributing your work(导出和分发作品)

Processing 环境最重要的功能之一就是能将草图打包成应用程序,只需点击一下即可。选择文件 → 输出程序,将当前草图打包为应用程序。这将把你的草图捆绑为 Windows、Mac OS X 或 Linux 的应用程序,具体取决于你从哪个操作系统导出。每次导出时,应用程序文件夹都会被覆盖,因此在更改文件夹内容之前,请复制或从草图文件夹中删除这些文件夹。或者,也可以在首选项中关闭自动清除文件功能。

有关导出功能的更多信息,请访问 https://processing.org/environment/#export 的环境页面。

译者注:中文版的具体位置如下:
在这里插入图片描述
点开后可以选输出的平台:在这里插入图片描述
输出结果是一个文件夹:在这里插入图片描述

Creating images from your work(导出成图片)

你不想把你的项目导出为一个实际的应用程序,你可能会想让它的输出形式是图片。想导出图片时,你可以在 draw()的末尾追加 saveFrame() 函数,会生成一连串 TIFF 格式的程序输出图像,分别命名为 screen-0001.tif、screen-0002.tif,以此类推。每次运行 draw() 都会保存一个新文件——当心,这会让你的草图文件夹很快塞满数百个文件。你也可以使用类似以下的函数,为要保存的文件指定自己的名称和文件类型:

saveFrame("output.png")

要对编号序列进行同样的操作,请在编号处使用 #(散列标记):

saveFrame("output-####.png");

要获得高质量的输出,可以将几何图形写入 PDF 文件,而不是屏幕,这将在后面有关 size() 函数的章节中介绍。

Examples and reference(示例和参考)

许多程序员在学校学习代码,而其他程序员则自学成才。自学包括查看大量其他代码:运行、修改、破坏和增强,直到可以将其重塑为新的东西。考虑到这种学习模式,Processing 软件下载包含数百个示例,用于演示环境和 API 的不同功能。

您可以从 "文件"→"示例 "菜单访问这些示例。这些示例根据其功能(如运动、排版和图像)或使用的库(PDF、网络和视频)分成不同的类别。

在列表中找到一个有趣的主题,然后尝试一个示例。你会看到一些熟悉的函数,如 stroke()、line() 和 background(),以及其他尚未涉及的函数。要查看某个函数的工作原理,请选择其名称,然后右击并从弹出菜单中选择 “在参考中查找”("在参考中查找 "也可在 "帮助 "菜单下找到)。这将在默认网络浏览器中打开该函数的参考资料。

除了函数语法说明外,每个参考页面还包括一个使用该函数的示例。与较长的代码示例相比,参考示例要简短得多(通常每个示例只有四到五行),也更容易理解。

译者注:中文版的范例程序可通过“文件”-“范例程序”打开,如下图所示:
在这里插入图片描述

More about size()(更多和size相关的知识点)

size() 函数设置全局变量宽度和高度。对于尺寸取决于屏幕的对象,应始终使用宽度和高度变量而不是数字。这样可以避免在更改 size() 行时出现问题。

size(400, 400);

// The wrong way to specify the middle of the screen
ellipse(200, 200, 50, 50);

// Always the middle, no matter how the size() line changes
ellipse(width/2, height/2, 50, 50);

在前面的示例中,size() 函数只指定了要创建窗口的宽度和高度。size() 函数的一个可选参数指定了图形的渲染方式。渲染器负责处理 Processing API 在特定输出函数(屏幕、高端显卡驱动的屏幕或 PDF 文件)中的实现方式。默认渲染器能出色地处理高质量的 2D 矢量图形,但会牺牲速度。尤其是直接处理像素的速度很慢。Processing 还包含其他几种渲染器,每种渲染器都有独特的功能。冒着深入探讨具体细节的风险,下面将介绍在 Processing 中可能使用的其他绘图模式。

size(400, 400, P2D);

P2D 渲染器使用 OpenGL 更快地渲染二维图形,同时使用 Processing 更简单的图形 API 和 Processing 开发环境的简易应用程序导出。

size(400, 400, P3D)

P3D 渲染器也使用 OpenGL 来加快渲染速度。它可以绘制空间中的三维物体和二维物体,以及照明、纹理和材质。

size(400, 400, PDF, "output.pdf")

PDF 渲染器会将所有几何体绘制到文件中,而不是屏幕上。要使用 PDF,除了修改 size() 函数外,还必须选择 “导入库”,然后从 "草图 "菜单中选择 “PDF”。这是默认渲染器的表兄弟,但直接写入 PDF 文件。

Loading and displaying data(加载和显示数据)

处理文件的方式是 Processing API 的独特之处之一。loadImage() 和 loadStrings() 函数都希望在名为 data 的文件夹中找到文件,而 data 是 sketch 文件夹的子目录。

高级教程
专门使用data这个文件夹能够解决本地测试以及网络部署的常见问题。像 Java 一样,使用 Processing 编写的软件也受到安全限制,比如本地的硬盘和其他网络服务的资源无法获取。这个安全限制能够防止恶意开发者,写代码损害你的电脑,或破坏你的数据,但是对于开发者来说这个限制给开发带来了阻碍。本地运行程序时,只要掌握相对路径,数据就可以直接从磁盘中读取;而在线运行时,数据也必须来自于同一服务器的某一个位置。数据可能与代码本身捆绑在一起(在 JAR 存档中,稍后讨论;或来自同一服务器上的另一个 URL)。对于本地文件,可以使用 Java 的 FileInputStream 类。如果文件捆绑在 JAR 压缩包中,则使用 getResource() 函数。对于服务器上的文件,可以使用 URL.openStream()。在从开发到部署的过程中,可能需要使用所有这三个函数。但是!在 Processing 中,文件 API 函数可以透明地处理上述每种情况(以及其他一些情况)。通过在 data 文件夹中放置资源,Processing 可以根据需要打包文件,以便在线和离线使用。

译者注:高级教程如果看不明白不要为难自己。这是开发团队的碎碎念,用户可以忽略。

文件处理函数包括 loadStrings()(将文本文件读入字符串对象数组)和 loadImage()(将图像读入 PImage 对象),后者是 Processing 中图像数据的容器。

// Examples of loading a text file and a JPEG image
// from the data folder of a sketch.
String[] lines = loadStrings("something.txt");
PImage image = loadImage("picture.jpg");

如果你了解数据类型和类的编程概念,阅读这些示例可能会容易一些。每个变量都必须有一个数据类型,如 String 或 PImage。
String[] 语法表示 “String 类数据的数组”。这个数组由 loadStrings 函数创建,并命名为 lines;以后在程序中可能会以这个名称使用。loadStrings 创建数组的原因是,它将 something.txt 文件分割成单行。下面的函数创建了一个 PImage 类变量,名称为 image。
要将文件添加到 Processing 草图的数据文件夹中,请使用草图 → 添加文件菜单选项,或将文件拖入 PDE 的编辑器窗口。如果数据文件夹不存在,则将创建该文件夹。
要查看草图文件夹的内容,请使用草图 → 显示草图文件夹菜单选项。这将在操作系统的文件浏览器中打开草图窗口。

译者注:俺也不知道为啥软件的中文版翻译把“sketch”全翻译成“速写本”了,上面的“草图”指的都是“sketch”,即软件中的“速写本”。

译者注:中文版的添加文件的对应位置是“速写本-添加文件”,如下:在这里插入图片描述

Libraries add new features(使用库添加新特性)

库是以特定格式收集的代码集合,可以方便地在 Processing 中使用。库对于项目的发展非常重要,因为库可以让开发者向用户提供新功能,而无需将其作为 Processing 核心 API 的一部分。

Processing 自带多个核心库。这些库可在 http://processing.org/reference/libraries/ 在线参考资料的 "库 "部分查看(也可从 PDE 中的 "帮助 "菜单查看)。

PDF 导出库就是一个例子。通过该库,可以直接从 Processing 中写入 PDF 文件。这些矢量图形文件可缩放至任意大小,并以极高分辨率输出。

要在项目中使用 PDF 库,请选择 Sketch → Import Library → pdf。这将在草图顶部添加以下一行:

import processing.pdf.*

Java 程序员会识别 import 命令。在 Processing 中,当草图以 applet 或应用程序形式导出时,这一行也用于确定与草图打包在一起的代码。
现在,PDF 库已经导入,您可以使用它来创建文件。例如,以下代码行创建了一个名为 lines.pdf 的新 PDF 文件,您可以将其绘制到该文件中。

beginRecord(PDF, " lines.pdf")

现在,每个绘图函数(如 line() 和 ellipse())都可以绘制到屏幕上,也可以绘制到 PDF 中。
其他库提供的功能包括从摄像头读取图像、发送和接收 MIDI 和 OSC 命令、复杂的 3D 摄像头控制以及访问 MySQL 数据库。

Sketching and scripting(草图绘制和脚本编写)

处理草图由一个或多个标签页组成,每个标签页代表一段代码。该环境是围绕只有几页代码的项目设计的,通常共有三到五个标签页。这涵盖了大量为测试和原型创意而开发的项目,通常是在将这些创意嵌入到更大的项目或构建更强大的应用程序以进行更广泛的部署之前。

草图的概念与脚本的概念完全相同,不同之处在于您使用的不是解释型脚本语言,而是通过编译为 Java 类文件来获得性能优势。当然,严格来说,Java 本身也是一种解释型语言,但它的字节码编译比 JavaScript、Python 或 Ruby 等语言更接近 “金属”。

Processing从未想过要成为视觉编程的终极语言,相反,我们的目标就是要做出这样的语言:

  • 我们自己的工作草图本,简化了我们承担的大部分任务。
  • 一个适合向非传统受众传授编程知识的编程环境。
  • 从脚本语言到更复杂或更难的语言(如完整的 Java 或 C++)的垫脚石。

在这几点的交叉点上,我们需要在速度和易用性之间做出权衡。如果我们不在乎速度,那么使用 Python、Ruby 或其他脚本语言可能会更合理。在教育领域尤其如此。如果我们不在乎向更高级的语言过渡,我们可能会避免使用 C++ 或 Java 风格的语法。但 Java 是草图绘制语言的一个很好的起点,因为它比 C/C++ 更宽容,还允许用户导出草图,通过网络发布。

Processing 集合了我们在构建此类软件(交互式作品草图或数据驱动的可视化)方面的经验,并简化了我们认为应该更容易的部分,例如快速上手,以及避免新用户遇到与设置 Java 相关的问题。

Don’t start by trying to build a cathedral(不要一开始就试图建造一座大教堂)

如果你已经熟悉编程,那么了解 Processing 与其他开发环境和语言的不同之处就很重要了。Processing 项目鼓励一种快速构建代码的工作方式,即在开发最终项目之前,将代码用作快速草图,或对想法进行测试。这可能会被误解为软件工程的异端邪说。也许我们离 "黑客 "并不遥远,但这更适合 Processing 所扮演的角色。为什么要强迫学生或普通程序员学习图形上下文、线程和事件处理功能,然后才能在屏幕上显示与鼠标交互的内容呢?对于高级开发人员来说也是如此:为什么每次开始一个项目时,他们总是需要从同样的两页代码开始呢?

在另一种情况下,快速尝试的能力远比复杂的代码结构更重要。通常情况下,你不知道结果会是什么,所以你可能会在一周内构建一些东西来尝试最初的假设,然后在下一周根据第一周学到的东西构建新的东西。为此,在开始使用 Processing 编写代码时,请记住以下注意事项:

  • 注意不要在代码中创建不必要的结构。当你学习如何将代码封装到类中时,很容易产生越做越小的想法,因为数据总是可以进一步提炼的。您需要分子、原子还是夸克级别的类吗?原子变小并不意味着我们需要在更低的抽象层次上工作。如果一个类有半页纸长,那么还有六个子类,每个子类都有半页纸长,这有意义吗?如果一个类只有一页半的篇幅,是否也能达到同样的效果?
  • 考虑项目的规模。不一定非要在第一天就构建企业级软件。先探索:找出帮助回答问题和满足好奇心所需的最少代码。

这样做的目的不是为了避免不断重写,而是为了将工程工作推迟到适当的时候。与传统的编程项目相比,软件工程的起始时间要晚得多,因为早期的快速迭代过程是一门艺术。

当然,一旦一切顺利,就要避免为了重写而重写的冲动。重写应该在解决完全不同的问题时使用。如果你能一针见血地指出问题所在,就应该重构以清理函数名和类之间的交互。但是,全面重写已经完成的代码几乎总是一个坏主意,无论它看起来多么 “丑陋”。

本账号所有文章均为原创or有版权二创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_46106285/article/details/136021841。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

下一篇:【翻译】Processing系列|(二)安卓模式的安装使用及打包发布
下下篇:【翻译】 Processing系列|(三)安卓项目构建

posted @ 2024-02-04 12:09  shandianchengzi  阅读(9)  评论(0编辑  收藏  举报  来源