文章目录

  • 引言
  • 代码
    • Bubbles 02
      • 主要流程
      • class ParticleSystem
      • class Particle
    • Space Running
      • 每次添加的粒子数量
      • 粒子的初始位置、速度
      • 粒子的渲染方式
      • 粒子是否需要删除的依据
  • 小结

引言

一花一世界,一叶一菩提。每个人眼中的花是不一样的,每个人眼中的世界也是不一样的 。昔时佛祖拈花,惟迦叶微笑,既而步往极乐。在菩提树下,从一朵花中便能悟出整个世界,最终得升。

今天就来给大家介绍日本先生Atsushi Tanaka的眼中的两个世界。

第一个是泡泡世界——Bubbles 02,效果如下:

第二个是方块世界——Space Running,效果如下:

大家肯定会觉得很奇怪,为什么这次一次讲两个作品呢?是因为这个作品背后的原理十分的相似:Bubbles 02里面是一些球体粒子向上移动,Space Running里面是一些立方体粒子向前移动。只不过是这些球体粒子和这些立方体粒子的初始位置不同罢了。

这里得说明一下:这两个作品的交互方式略有不同,为了更加关注两个作品粒子运动方式的异同,下面的代码都是按照Bubbles 02的交互方式来的实现的。所以下面代码的效果和原作品的效果会有很小的差异,不过大家不用太在意,我们应该更多地关注代码背后的原理。

同时这两个作品作者都是P5.js写的,我还是给大家介绍Processing版本的代码。
  

代码

在大概了解了一下Processing有关绘制3D图形的知识后我们就可以开始看代码了。那么首先我们下来看Bubbles 02。
  

Bubbles 02

主要流程

因为我们之前已经很详细地讲解过粒子系统了,所以大家对这段代码一定不陌生。

ParticleSystem ps;
void setup() {//窗口大小设置为全屏,并且选择3D渲染器fullScreen(P3D);colorMode (RGB, 256);ps = new ParticleSystem();
}void draw() {background(0);ps.run();
}

  

class ParticleSystem

下面我们来看看ParticleSystem这个类,这个类也没有太多的需要说明,主要用来管理所有的粒子。对每一个粒子进行添加、删除、更新状态(位置、生命长度等)、绘制等。

class ParticleSystem {final int MAX_CNT = 200; //系统中最大的粒子数量ArrayList<Particle> particles;float thetaX, thetaY; //分别绕x、y方向的旋转角度ParticleSystem() {particles = new ArrayList();}void run() {//向粒子系统中添加新的粒子addParticle(); update();display();}void addParticle() {// 防止系统的粒子数量过多if (particles.size() >= MAX_CNT)return;particles.add(

Processing 案例 | 日本先生Atsushi Tanaka的3D世界相关推荐

  1. delphi 实现屏幕旋转代码_代码检查 | 如何用Processing实现3D世界

    一花一世界,一叶一菩提.每个人眼中的花是不一样的,每个人眼中的世界也是不一样的 .昔时佛祖拈花,惟迦叶微笑,既而步往极乐.在菩提树下,从一朵花中便能悟出整个世界,最终得升. 今天就来给大家介绍日本先生 ...

  2. 虚拟世界由此开始 追逐3D世界的脚步zz

    十一年前,我们在争论究竟是256色画面好还是16位色彩深度画面好.十一年后的今天,我们争论的是超采样抗锯齿好还是多重采样抗锯齿好.十一年前,我们在争论是否可能实现32位渲染,十一年后,我们争论的是需不 ...

  3. NeHe OpenGL第十课:3D世界

    NeHe OpenGL第十课:3D世界 加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由 ...

  4. NeHe OpenGL教程 第十课:3D世界

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. C++ Opengl 3D世界源码

    C++ Opengl 3D世界源码 项目开发环境 项目功能 项目演示 项目源码传送门 项目开发环境 开发语言:C++和IDE:VS2017,操作系统Windows版本windows SDK8.1,三方 ...

  6. ROS机器人程序设计(原书第2版)3.9.1 使用rqt_rviz在3D世界中实现数据可视化

    3.9.1 使用rqt_rviz在3D世界中实现数据可视化 在roscore运行时,启动rqt_rviz(请注意rviz在ROS hydro中依然有效): 我们将会看到如下图所示的图形化工作界面: 在 ...

  7. [文摘20080919]小软件将网页变为3D世界

    本文转自:http://news.cnblogs.com/n/42499/ -------- ExitReality,一家名不见经传的澳大利亚软件开发商日前宣布了他们的同名软件作品,号称能够将整个互联 ...

  8. 超级马里奥游戏像素素材_《超级马里奥3D世界+库巴之怒》游戏文件尺寸相当小...

    现在的玩家越来越关心游戏容量问题,动辄100+GB的文件尺寸常常会让储存空间不堪重负,所以玩家在选游戏之前经常会看看这款游戏占多大空间,再算一算自己的机器里能装多少.在<超级马里奥3D世界+库巴 ...

  9. 基于mfc的图形学实例_前端图形学(二十)——退后!!我要开始进入3D世界了...

    欢迎来到[畅哥聊技术]前端图形学相关技术文章,更多精彩内容持续更新中,敬请关注. 写在前面 先说好,今天所说的3D并不是大家惯性思维说3D就想到了WebGL,那么接下来的文章都是基于Canvas2d来 ...

  10. OpenGL基础12:进入3D世界

    前置:OpenGL基础11:空间 一.坐标系 我们都学过坐标系,根据z轴的方向,一般有两种不同的坐标系表示方法: 其中拇指是x轴正方向,食指是y轴正方向,中指是z轴正方形 OpenGL约定是右手坐标系 ...

最新文章

  1. zabbix自动发现规则实现批量监控主机的TCP监听端口
  2. java中高级大公司多线程面试题
  3. RabbitMQ Network Partitions 服务日志对比
  4. MySQL动态行转列
  5. 深度学习(25)随机梯度下降三: 激活函数的梯度
  6. 如何上传文件夹到GitHub上(配图详解)
  7. cocos2dx 3.4 截图代码
  8. Chapter 14 Exercises Problems
  9. mysql事务隔离级别详解_高性能MySQL-详解事务与隔离级别
  10. 推荐系统(recommender systems):预测电影评分--构造推荐系统的一种方法:协同过滤(collaborative filtering )...
  11. FRR BGP协议分析14 -- 静态路由的处理流程
  12. win10taskkill强行结束进程_强制结束进程命令(ntsd命令/taskkill命令)使用教程
  13. 交互设计精髓about face3读书笔记(没写完)
  14. 总线外设基础1——i2s,i2c,uart,spi,touchpanel,lcd
  15. 研大考研:2015考研政治认识论知识点
  16. Codeforces 887D - Ratings and Reality Shows
  17. 【C语言】函数参数试探:传指针与传引用——以队列为例
  18. 完全用Linux工作——看清华学子痛批Windows
  19. 【DBN分类】基于matlab深度置信网络DBN变压器故障诊断【含Matlab源码 2284期】
  20. 嵌入式linux initramfs,linux的initrd机制和initramfs机制之initramfs

热门文章

  1. 小型企业办公楼建网络规划方案
  2. 关于淘宝爬虫实现的总结和反思
  3. 点桌面计算机一直在加载,Win10系统打开此电脑很慢总显示在加载的2个解决方法...
  4. 64位win10刷jlink固件
  5. 东北大学OJ题解—(结构体)1621: 实验13-5:求相距最近的两个点
  6. python编写一个简单的程序验证码_Python编写一个验证码图片数据标注GUI程序附源码...
  7. 颗粒包装机三维图人体三维模型流水线设备三维模型水井装置三维图数控划线机设计三维图圆锥齿轮千斤顶三维图华硕水冷电脑主板三维图小齿轮油泵三维图减速器三维装配图手动攻丝机三维图轴承三维图
  8. 一场AI竞赛,怎么就让这群年轻人变化这么大?
  9. Linux下释放权限,Linux-权限管理命令
  10. Swift 了解(1)