上周,我介绍了生成艺术的概念P5.js,以及有关P5.js的一些设置问题。 我给您留下了一个脚手架的存储库 ,该存储库使所有项目设置麻烦事都消除了,但是我们还没有研究任何东西。 本周,我们将开始实际制作一些艺术品。

我们将通过介绍一些基本的API概念开始简单的工作,并在为水彩效果创建“纸”时建立适当数量的随机性。 正确使用纸张水彩对于任何水彩都很重要。 它还将帮助我们进入在数字空间中模拟现实世界的思维方式。 这篇文章其余部分的目的是为水彩背景创造真实的纸张效果。 我希望我们的纸张为米白色,奶油色或米色,并且应该有一点质感。

请注意,我称背景为“纸”(我要模仿的东西),而不是“画布元素”(实现术语)。 用现实世界而不是数字空间来思考是使我脱离实现细节并帮助指导我的直觉的一个小脑力把戏。

在P5.js中创建彩色背景

我们的脚手架中已经包含了一些P5代码,因此我们可以使用现有的设置功能开始使用。

p5.setup = () => {    p5.createCanvas(CANVAS_WIDTH, CANVAS_HEIGHT);    p5.colorMode(p5.HSB, 100);    p5.frameRate(5);    p5.background(10);    p5.textSize(46);    p5.fill(90);    p5.text('Hello (Info)World!', 120, 280);};

因为我们不需要编写文本,所以不需要p5.setup函数主体的最后三行,因此让我们删除这些行并逐步执行其余代码。

首先,我们创建一个具有一定宽度和高度的画布,该画布由前面在文件中定义的常量指定。 此代码实际上创建了canvas元素并将其添加到DOM中。 接下来,我们将P5的颜色模式设置为HSB,范围为0到100。

作为开发人员,您可能对十六进制颜色代码(#FF2304)更加熟悉,但是十六进制代码很难推理。 例如,如何使十六进制代码更轻一点? HSB代表色相,饱和度和亮度,它为您提供了一种更直观的颜色处理机制。

色相会更改颜色,而饱和度会更改颜色的显示深度(请考虑柔和的黄色与荧光笔的黄色)。 亮度与颜色发出的光量有关。 这有点像将您的颜色(例如,荧光笔黄色)放在充满光线的房间里的调光器上。 您看到的荧光笔的颜色是黄色的,而灯光却一直调到最高还是半暗? 如果关闭灯,每种颜色都会变成黑色。

我为我们的帆布,,纸选择了一种芥末黄色调,这种色在非常低的饱和度下可以为我提供所需的乳白色。

IDG

在HSB中,左侧为0到100:15、100、100,右侧为15、10、100。

我们可以使用现有的p5.background方法,该方法p5.background灰度背景使用一个参数,但对于P5处于的色彩模式,也可以使用三个参数。

p5.background(15, 10, 100);

在P5.js中向纹理背景添加纹理

我们的浅芥末色背景很好,但我希望它有点像自制纸,您可以在其中实际看到纤维在各个方向上的运动。 例如:

IDG

我去年买了一些牛皮纸做瓶子标签。

为了模拟纸纤维,让我们在整个位置随机散布短线,每条短线都指向随机方向。 线条的颜色和长度应有所不同,因此我们也要在其中添加随机性成分。 我们将使用JavaScript提供的Math.random()函数。

Math.random()生成一个介于0和1之间的随机伪数。如果我们想要一个介于10和15之间的随机值,我们可以将Math.random()的输出乘以两个数字之间的差5这将为我们提供一个介于0到5之间的随机数。然后,我们只需将10加到10到15之间的一个随机数即可。

10 + Math.random() * 5; // Gives you a random number between 10 and 15

创建指向不同方向的线段需要一定的三角函数,因此,为了隔离随机性方程,让我们首先绘制一堆随机点。 我们希望将这些点的X和Y位置随机化,分别在0和画布的宽度和高度之间。 该代码如下所示:

    const NUM_DOTS = 400;    for(let i = 0; i < NUM_DOTS; i++) {      let x = Math.random() * CANVAS_WIDTH;      let y = Math.random() * CANVAS_HEIGHT;      p5.ellipse(x, y, 10, 10);    }
IDG

您可以增加NUM_DOTS常数以增加圆的密度。

IDG

然后,您可以通过创建另一个随机数(例如5到15),并将其插入P5.ellipse()函数的第三个和第四个参数,而不是上面的示例中的硬编码值,来将一些变化引入圆的大小。 结果:

IDG

在P5.js中创建论文背景

让我们回到纸纤维。 我将为您省去三角学课,但足以说明一般过程是这样的:

  1. 计算线段起点的随机x和y坐标。
  2. 计算直线将在0到2 pi之间的随机角度。
  3. 计算线段的随机长度。
  4. 给定起点,长度和角度,请进行数学运算以得出终点。

该代码如下所示:

    let x1 = Math.random() * CANVAS_WIDTH;    let y1 = Math.random() * CANVAS_HEIGHT;    let theta = Math.random() * 2 * Math.PI;    let segmentLength = Math.random() * 5 + 2;    let x2 = Math.cos(theta) * segmentLength + x1;    let y2 = Math.sin(theta) * segmentLength + y1;

然后,我们使用p5.line()函数,传入四个坐标。

    p5.line(x1, y1, x2, y2);

这是绘制30,000条细线所得到的示例:

IDG

那就是我们想要的,但是线条太过分了,因为它们是纯黑色。 为了更改线条的颜色,我们可以在调用p5.stroke()方法之前以新的颜色调用p5.line()方法。

为了获得美纹纸效果,我们需要在之前选择的基础颜色周围加入一些颜色变化。 我希望色相大致相同,所以我只玩饱和度和亮度。 我在p5.stroke()方法中添加了一个可选的第四个参数,该参数也增加了不透明度。

    p5.stroke(      BASE_H,      BASE_S - Math.random() * 5,      BASE_B - Math.random() * 8,      Math.random() * 10 + 75    );

Etvoilà :

IDG

我几乎可以感觉到质地了!

我们有纸! 下周之前,您可以随意使用此代码 ,当我们不得不尝试更多的数学方法来尝试从纸上移到墨水上时。 有任何问题,评论或很酷的变化吗? 请在评论中或在Twitter上分享它们: @freethejazz 。

From: https://www.infoworld.com/article/3332676/javascript-tutorial-create-a-textured-paper-background-with-p5js.html

JavaScript教程:使用P5.js创建带纹理的纸张背景相关推荐

  1. unity创建纹理_创建带纹理的文本的技术

    unity创建纹理 View demo 查看演示 Download Source 下载源 In this article we're going to explore several techniqu ...

  2. JavaScript setTimeout用法,js setTimeout带参数

    JavaScript setTimeout用法,js setTimeout带参数 ================================ ©Copyright 蕃薯耀 2021-07-07 ...

  3. JavaScript教程9 - Node.js

    Node.js 安装Node.js https://nodejs.org/ npm npm其实是Node.js的包管理工具(package manager). 命令行模式 执行node hello.j ...

  4. Qt 暗夜黑主题教程(一) 创建带圆角和阴影的无边框窗口

    创建项目 创建一个主窗口为 QWidget 类.带 UI样式表的项目.我的项目名叫 NightDark,窗口类名叫 Widget,刚入门的小白可以跟我命名保持一致方便学习,大佬自便.(不对,大佬怎么来 ...

  5. 子进程会继承父进程的哪些内容_【学习教程】Node.js创建子进程方法

    来源 | https://github.com/CommanderXL/biu-blog/issues/25 exec 其中exec可用于在指定的shell当中执行命令.不同参数间使用空格隔开,可用于 ...

  6. p5.js 光速入门中文教程

    本文简介 点赞 + 关注 + 收藏 = 学会了 本文的目标是和各位工友一起有序的快速上手 p5.js ,会讲解 p5.js 的基础用法. 本文会涉及到的内容包括: 项目搭建 p5.js 基础2D图形 ...

  7. p5.js 编程基础学习合集【2】

    之前在< p5.js 和 Processing 的恩怨情仇>曾提及 p5.js 与 Processing 的不同点之一就是: 在 JavaScript 中,变量没有类型.使用 var 而不 ...

  8. three.js创建地球带大气层、辉光、云层、凹凸、高光

    文章目录 three.js创建地球 1.基本场景搭建 2.添加地球 3.添加轨道控制器 4.添加云层 5.添加大气层 6.添加星空背景 7.添加辉光效果 8.添加轨道卫星 9.TS重构 10.打包发布 ...

  9. p5.js案例(二):创意作品——USP消音版手枪模型

    文章目录 前言 原图 编程语言 实现逻辑 效果图 完整代码 前言 根据老师的要求,创作一幅介绍自己的作品,可以是具象化地描绘形象,也可以是任何形式表现自己的兴趣.追求.特色.经历等. 由于最近比较喜欢 ...

最新文章

  1. poj_2762,弱连通
  2. Nginx+keepalived负载均衡高可用篇第③版
  3. java map 迭代删除元素,java – 如何在迭代时删除和添加元素到TreeMap?
  4. Java算法之 一致性hash算法原理及实现
  5. python 读取txt
  6. PHP CRC16 校验码的算法怎么使用
  7. [转]WebView长按弹出复制粘贴
  8. dataframe根据时间戳timestamp切分成多个dataframe
  9. 第二冲刺阶段绩效评估
  10. JAVA(-Xms,Xmx,Xmn-XX:newSize,-XX:MaxnewSize,-XX:PermSize,-XX:MaxPermSize)区别
  11. python 自动登录网站_分析某网站,并利用python自动登陆该网站,下载网站内容...
  12. 德赛西威280b升级_牵手英伟达/德赛西威 理想自动驾驶蓝图初现
  13. 6.Nginx 的 Rewrite 规则
  14. Git—如何Windows操作系统中安装Git
  15. git remote: Permission to denied
  16. 金蝶K3销售价格控制模块探讨
  17. 电脑蓝牙音箱,电脑怎么连蓝牙音响吗
  18. React Demo Three - 简书掘金
  19. sqlserver的分页查询
  20. #18 可视化基础4-簇形柱状图、百分比堆积柱状图、并列子图

热门文章

  1. linux启动停止脚本实现
  2. 百度开发者平台实现拍照识别
  3. linux vi 按键删除键出现字母A,B,C,D 等字母解决办法
  4. html中给button设置背景图片
  5. 计算机图形专业世界排名,2020 THE世界大学排名-美国电子电气工程专业
  6. 使用FlipClock.js 制作精美的定时器
  7. CF821E(多次矩阵快速幂)
  8. 复杂列表twoway-view的使用
  9. 命令格式:tar -zxvf 压缩文件名.tar.gz
  10. 智慧职教云答案在哪里找_职教云的答案在哪里找?,云课堂智慧职教云题库答案,职教云怎么出答案...