使用p5.js创意编程

这篇博客记录了一位作者使用p5.js库创作动态自我肖像的过程,包括脸部和头发等细节的绘制,以及通过背景水晶、跟随鼠标移动的蝴蝶和鼠标点击互动效果实现动态效果。作者分享了绘制技巧,如使用arc和rect构造脸部轮廓,用bezier曲线绘制复杂形状,并提供了部分代码示例。
摘要由CSDN通过智能技术生成

前言

第二份作业的要求是具象化地描绘自己的形象,也可以是任何形式表现自己的兴趣、追求、特色、经历等。在构思时某崩X3游戏出了新角色耗费了我大量的资源去抽取,突然就有了将这件事画下来的想法。

实验结果

在这里插入图片描述
(这里鼠标按下后出现黄色光圈是动图录制软件的问题,实际并没有)

绘制过程

脸部绘制

脸部的绘制选择了arc()画圆弧和rect()画长方形建构大致轮廓

stroke(0);
  strokeWeight(0.2);
  fill(255, 250, 240);
  rect(305, 250, 120, 50, 20);
  arc(348, 255, 210, 240, 0, PI, OPEN);//脸部绘制

其他部分的绘制

绘制头发是最麻烦的事项,曲线非常多所以大量的使用了bezier曲线。bezier曲线锚点和控制点的选取因为直接计算工作量太大所以采用了先在ps中绘制再获取坐标的方法。

stroke(0);
  strokeWeight(1);
  beginShape();
  vertex(347, 159);
  bezierVertex(270, 161, 244, 203, 238, 248);
  bezierVertex(238, 248, 220, 307, 181, 321);
  bezierVertex(181, 321, 219, 320, 225, 313);
  bezierVertex(225, 313, 210, 359, 239, 389);
  bezierVertex(239, 389, 235, 359, 252, 326);
  bezierVertex(252, 326, 266, 387, 297, 394);
  bezierVertex(297, 394, 264, 336, 279, 314);
  bezierVertex(279, 314, 315, 273, 318, 265);
  bezierVertex(318, 265, 340, 321, 363, 330);
  bezierVertex(363, 330, 359, 323, 366, 307);
  bezierVertex(366, 307, 366, 317, 366, 317);
  bezierVertex(366, 317, 378, 279, 389, 269);
  bezierVertex(389, 269, 416, 308, 423, 311);
  bezierVertex(423, 311, 432, 373, 408, 391);
  bezierVertex(408, 391, 453, 370, 453, 328);
  bezierVertex(453, 328, 472, 357, 467, 378);
  bezierVertex(467, 378, 490, 325, 477, 299);
  bezierVertex(477, 299, 500, 326, 522, 325);
  bezierVertex(522, 325, 467, 284, 457, 238);
  bezierVertex(457, 238, 442, 156, 347, 159);
  endShape(); //头发

其他部分的绘制大同小异,基本都是使用了bezierVertex()绘制曲线和fill()进行填充。

动态和交互

背景水晶

背景绘制了随着时间移动的水晶,代码如下

var Second = millis() / 1000;
  var posx = Second * 200
  var posy = Second * 300;
  posx = posx % width;
  posy = posy % width;
  fill(0, 91, 255);
  stroke(0);
  strokeWeight(1);
  for (let i = -300; i < 800; i = i + 200) {
   
    beginShape();
    vertex(posx + i, posy);
    vertex(posx - 17 + i, posy + 5);
    vertex(posx - 24 + i, posy + 26);
    vertex(posx - 14 + i, posy + 41);
    vertex(posx - 1 + i, posy + 37);
    vertex(posx + 9 + i, posy + 16);
    vertex(posx + i, posy);
    endShape();
    line(posx + i, posy, posx + i - 6, posy + 17);
    line(posx + i - 17, posy + 5, posx + i - 6, posy + 17);
    line(posx + i + 9, posy + 16
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值