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

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

相关文章

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模