对比码绘与手绘——动态篇

2023-11-11 13:10
文章标签 动态 对比 手绘 码绘

本文主要是介绍对比码绘与手绘——动态篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在上一篇文章里我绘制了一幅夜空下的大巴

但是既然是夜空,没有星星就会有些光秃秃的,为了让它动起来,看起来稍微好看一点,有趣味性一点,现在需要让他动起来,用代码在夜空上加入明灭的星空效果,动图如下:

 

在上一篇代码的基础上改变如下:

 

function setup() {createCanvas(208*4,154*4);//坐标乘5angleMode(DEGREES);noStroke();var bgStars = ~~(Math.max(208*4, 154*4) / 20) + 20;while (bgStars--) {createBgStar(bgStars)}
}

添加

var V = p5.Vector
var stars = []
var lastPos = {x: null,y: null
}function createBgStar(index) {var s = new Star(new V(random(0, 208*4), random(0, 60*4)))s.maxSize = (index % 4) + 1stars[index] = ss.onDie = function() {//console.log(index, 'is dead.')createBgStar(index);}
}function shouldBeImmortal() {return ~~(random(0, 500)) == 0x0A4
}var Star = function(position) {this.color = '#9999ff'this.position = positionthis.age = 0this.deadFrom = 0this.maxSize = random(10, 30)this.maxAgeMultiplier = random(2, 5)
}Star.prototype = {render: function() {var diameter = this.diameter()if (diameter == 0) {return}drawingContext.shadowColor = this.colordrawingContext.shadowBlur = this.isImmortal ? this.shadowAmount * 1.4 : this.shadowAmountellipse(this.position.x, this.position.y, diameter, diameter)},diameter: function() {var s = this.age - this.deadFromreturn Math.max(Math.min(s, this.maxSize), 0)},makeImmortal: function() {this.color = '#ff6666'this.isImmortal = true},shine: function() {this.shadowAmount = map(noise(this.position.x, this.age, frameCount), 0, 1, this.age, this.age * 2)},grow: function() {this.age += this.isImmortal ? 0.04 : 0.02if (this.isImmortal) returnif (this.diameter() > 0) {if (this.age > this.maxSize * this.maxAgeMultiplier) {this.deadFrom += 0.2 * this.maxAgeMultiplier}} else {if (!this.dead && this.onDie) {this.onDie()}this.dead = true}}
}

在draw函数中添加

stars.forEach(function(star) {star.grow()star.shine()star.render()})

通过上面的代码来实现星星的随机生成以及亮一段时间后消失的效果。

动态码绘与手绘的比较

呈现效果:比起静态码绘,显然在动态创作放方面码绘是很棒的。码绘可以实现一种动态的绘画方式,也可以与画作通过键盘、鼠标或者声音等输入设备进行交互,这是传统的手绘做不到的。同时码绘可以向我们展示绘画的过程,但是手绘向观察者展示的是最终的成品。码绘让观察者也参与到绘画的过程里,通过改变代码中的参数或者其他地方来完成这种交互,有参与感就会更有趣味性,像是让梵高的画按照线条走向流动起来并且让人们可以通过鼠标加速或者引导这种流动过程,这就会显得非常有趣味性,让这些艺术作品以一种奇特的方式离人们更近。

技法:手绘需要美术基础,码绘对艺术基础要求较弱,但是对编程基础要求更多,通过分支、循环等来实现图画的运动。

工具:码绘需要一台电脑,手绘需要绘画工具。

创作体验:动态码绘会让人感到码绘的趣味性,让我觉得静态码绘的痛苦减轻了一些,当然这次是动态码绘,运动的主要是星星,背景还是第一篇文章里静态码绘的内容。这次码绘实现的是星空的明灭,像是可以用代码实现的动态效果还有很多。不知道这篇博文有没有读者,如果有的话,你也可以尝试一幅自己的动态码绘。

应用:码绘可以用于网页的绘制,增加网页的美感,手绘可以应用于包括但不局限于广告、动画、游戏、UI等方面,总体来说手绘应用范围还是更广泛一点,但是美化网页还是用码绘更方便。二者各有千秋。

参考资料:

http://bbs.jcwcn.com/thread-432031-1-1.html

https://blog.csdn.net/magicbrushlv/article/details/77895290

https://www.bilibili.com/video/av19583422/

https://p5js.org/reference/

这篇关于对比码绘与手绘——动态篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/390283

相关文章

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

Golang中拼接字符串的6种方式性能对比

《Golang中拼接字符串的6种方式性能对比》golang的string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去,主要有6种拼接方式,下面小编就来为大家详细讲讲吧... 目录拼接方式介绍性能对比测试代码测试结果源码分析golang的string类型是不可修改的,对于拼接字