创作背景

本次使用P5.js作为交互作品的创作平台,以《Nature of Code》这本书里面介绍的三种技术为基础展开创作,分别是‘向量’、‘力’和‘粒子系统’,将这三种技术融合在一起创作出粒子的运动效果,还有用户交互对粒子产生的影响(主要指鼠标运动对粒子产生的力的作用)。力图可以充分展现出交互对动画产生的显著影响。

创意

本作品主要通过粒子系统模拟喷泉的效果,众所周知,喷泉的炫酷效果都是事先通过程序预先设定好的,无论外力怎么响应,都不会改变喷泉原先的展示效果。
本作品反其道而行之,通过粒子系统创作一种可以随意通过交互改变喷泉状态的交互式喷泉。
我把这种交互式喷泉想象为——当用户不与喷泉产生交互时,喷泉是静态的,宛如一潭安静的湖水,如下图所示

而与喷泉产生交互的方式是——用户移动鼠标靠近底部的‘水潭’,当鼠标的距离与‘水潭’足够近时,鼠标就会对‘水潭’中的粒子产生力的作用,粒子在力的作用下产生向上的运动,同时受到重力的作用,形成喷泉的效果。
大家可以把这种交互形式想象成隔空取物的魔幻效果!想象自己是一名武功盖世的武林高手,可以举手投足间就让一潭湖水变幻出各种各样的喷泉效果!!!

功能、用法

用户可以随意拖动鼠标到屏幕下方接近水潭的位置,当系统检测到鼠标距离粒子的距离足够近时,就会对粒子产生吸引力,从而导致粒子往鼠标的位置运动,产生喷泉效果,而当粒子运动到鼠标位置上方时,这时候鼠标对粒子不再产生吸引力,粒子只受到重力的作用,这时候粒子就会很自然地产生向下的匀加速运动,从而完美地呈现了真实的喷泉效果。

是不是十分的炫酷和有趣!

技术分析

本次交互设计采用P5.js为平台,采用了力,向量和粒子系统三种技术进行创作,下面一起来看看详细的技术分析。

I:粒子类

function Particle(x, y) {this.lastPos = new p5.Vector(x, y);this.pos = new p5.Vector(x, y);this.vel = new p5.Vector(0, 0);this.acc = new p5.Vector(0, 0);this.size = random(2, 20);this.h = globalHue;
}

首先编写一个粒子类用于保存粒子的各种属性——位置、速度、加速度、还有粒子的大小,颜色。
将粒子的位置、速度、加速度都设置为向量的形式,这样有利于模拟在真实世界中喷泉的运动效果
粒子的大小随机,颜色随着时间的变化产生渐变

II:

function setup() {createCanvas(windowWidth, windowHeight);colorMode(HSB, 360);mouseX = width / 2;mouseY = height / 2;
}

初始化窗口设置
采用HSB的颜色模式,这样可以方便地实现颜色的渐变效果
鼠标初始的位置设置为屏幕中心点

III:

function draw() {noStroke();fill(0, 5);rect(0, 0, width, height);for (var i = 0; i < spawnPerFrame; i++) {allParticles.push(new Particle(random(width), height));}

绘制窗口
每一帧减少spawnPerFrame个粒子,防止粒子过多造成系统卡顿

IV:

for (var i = allParticles.length - 1; i > -1; i--) {allParticles[i].acc.add(new p5.Vector(0, allParticles[i].size * 0.01));// Quick check to avoid calculating distance if possible.if (abs(allParticles[i].pos.x - mouseX) < mouseSize) {d = dist(mouseX, mouseY, allParticles[i].pos.x, allParticles[i].pos.y);if (d < mouseSize) {var vec = new p5.Vector(mouseX, mouseY - mouseSize);vec.sub(new p5.Vector(allParticles[i].pos.x, allParticles[i].pos.y));vec.normalize();allParticles[i].vel.add(vec);allParticles[i].h += 1.5;if (allParticles[i].h > 360) {allParticles[i].h = 0;}}}allParticles[i].vel.add(allParticles[i].acc);allParticles[i].pos.add(allParticles[i].vel);allParticles[i].acc.mult(0);

检测粒子与鼠标的距离,并且对粒子施加响应的加速度,同时检测粒子是否超出屏幕

V:

stroke(allParticles[i].h, 360, 360);strokeWeight(allParticles[i].size);line(allParticles[i].lastPos.x, allParticles[i].lastPos.y, allParticles[i].pos.x, allParticles[i].pos.y);allParticles[i].lastPos.set(allParticles[i].pos.x, allParticles[i].pos.y);if (allParticles[i].pos.y > height || allParticles[i].pos.x < 0 || allParticles[i].pos.x > width) {allParticles.splice(i, 1);}}globalHue += 0.15;if (globalHue > 360) {globalHue = 0;}
}

绘制粒子的运动轨迹,并将颜色设置为随时间变化而变化

总结

这次的交互媒体创作的分享到这里就差不多结束了,这次创作对我来说也是一种全新的体验,在将新技术运用到程序中的同时,我也在尝试一种以前没有尝试过的主题——试图在交互的世界中创作一种与现实世界的体验与众不同,但又和真实世界紧紧联系的交互体验,希望用户可以在交互的过程中获得与真实世界中不一样的乐趣,这是我的设计理念所在,希望大家喜欢这次的作品,谢谢~

交互媒体设计之交互喷泉相关推荐

  1. 计算机交互媒体应用范围,浅析交互媒体设计中的科技与艺术的关系

    颜成宇 孙博 摘 要:科学技术发展带来的影响是多面的,最重要的体现是给生活方式带来的变化.不仅表现在人们的衣食住行,还表现在对人们精神层面的影响.随着数字化时代的到来,交互媒体在实际生活中的应用也越来 ...

  2. 交互媒体设计作业:Processing射击游戏

    交互媒体设计作业:Processing射击游戏 一.简介 这是一个全年龄向的双人射击游戏,操作简单,容易上手,只需操控四个方向键,就能操控你的小球吐出子弹全屏弹跳,攻击你的对手.这个简单的小游戏通过p ...

  3. 画出的点做交互_设计之下交互设计原型设计之概念设计

    目录 //交互设计// 「设计之下」---交互设计:交互设计师是做什么的?上线的产品中那一块是交互设计师的产物呢? ·项目启动 1.1「设计之下」---交互设计:项目启动之从想法到项目,什么是项目? ...

  4. 《众妙之门——移动交互体验设计》—— 1.2 物物互联

    本节书摘来异步社区<众妙之门--移动交互体验设计>一书中的第1章,第1.2节,作者:[德]Smashing Magazine,更多章节内容可以访问云栖社区"异步社区"公 ...

  5. 计算机交互媒体应用范围,交互媒体

    交互媒体是指: 受众与媒体或者受众与受众间能够借助媒体这个平台达到一种互动状态.即能够实现人与机.人与人之间的媒体沟通. 交互型媒体一般建立在现代网络技术.数字技术. 计算机技术等多项技术的基础上.常 ...

  6. sketch如何做设计稿交互_《动静之美——Sketch移动UI与交互动效设计详解》历程...

    随着移动互联网的迅速崛起,对移动产品界面的设计质量和迭代速度都有了更高的要求,市面上开始涌现出一批专门针对移动UI设计的软件,Sketch便是其中的佼佼者.Sketch因其强大的功能以及极低的入门门槛 ...

  7. 《众妙之门——移动交互体验设计》一1.2 物物互联

    本节书摘来自异步社区<众妙之门--移动交互体验设计>一书中的第1章,第1.2节,作者[德]Smashing Magazine,更多章节内容可以访问云栖社区"异步社区"公 ...

  8. sketch如何做设计稿交互_当屏幕可以折叠,交互设计怎么做

    折叠屏终端上市,无形中增加了电商平台的开发运维成本.笔者根据折叠屏的特点,提出了三种交互方案,看看如何在折叠屏上展示界面. 2007年,当乔布斯举着没有物理键盘的iPhone向全世界展示他的新发明时, ...

  9. sketch如何做设计稿交互_交互设计师是做什么的——交互设计的历史、现状和未来...

    交互设计是定义.设计人造物系统的行为的设计领域,它定义了两个或者多个互动的个体之间交流的内容和结构,使之互相配合,达成某种目的.--百度百科 交互设计师是以人的需求为导向,理解用户的期望和需求的同时, ...

最新文章

  1. Python 内部:可调用对象是如何工作的
  2. 计算机还是数学竞赛内容吗,除了AMC,数学牛娃还能参加什么高含金量的数学竞赛...
  3. ZOJ2930 The Worst Schedule(最小割)
  4. lisp中的*,**,***
  5. ssm数据库异常问题
  6. python axes函数_matplotlib中的axes.flat做什么?
  7. java memcached incr_Memcached incr/decr 命令
  8. python正则匹配ip地址_python 正则表达式匹配IP地址
  9. 专家称纳米机器人未来将“入侵”人脑,让人类将获得“超能力”
  10. Python对我下手了!学会这几个知识点可以救命!
  11. Jzoj4384 Hashit
  12. word导出PDF,彩色无故变成黑色的解决办法。
  13. 学C语言的大佬们帮帮小弟吧小弟感激不尽
  14. Yagmail通过QQ邮箱发送邮件实例
  15. windows系统服务器怎么锁屏,使用Windows 8的十个小贴士:自定义锁屏
  16. 第2章 IoC的基本概念
  17. 3d Max安装失败(Microsoft Visual C++ 2010 Redistributable)
  18. cuda的安装,及pytorch调用GPU步骤
  19. 1230k倍区间,关于cnt[0]赋值为1的解释
  20. AsyncTask下载网络文件,并显示下载进度

热门文章

  1. 23种设计模式-抽象工厂模式介绍加实战代码
  2. 来自双非二本的困惑与无助以及自救
  3. liunx下xxd命令将text文件转成hex文件
  4. Ubuntu20.04 系统禁用自带的Nouveau驱动
  5. Python分布式爬虫详解(二)
  6. 企业工程项目管理系统源码的各模块及其功能点清单
  7. IDEA下载、破解和测试(自己记录)
  8. FigrCollage for mac(照片拼贴制作工具)
  9. JavaSE基础篇 | 对象的创建和使用
  10. 众人期盼的阿里妈妈自动登录来了!(2020-09-01)