Processing 高效控制管理图形方法(一)
来源:互联网 发布:网络帐号交易平台 编辑:程序博客网 时间:2024/06/05 16:49
介绍一下Processing控制图形的类游戏物件(gameobject的transform节点)的方法。【借Unity里的Transform component的概念进行类比学习】
大家熟悉Unity游戏引擎控制gameobject的transform节点,有三大属性可被控制,如图:
分别是Position,Rotation和Scale。(位置(偏移量),旋转值和缩放值)
有这样的component控制object就很得心印手。那倘若processing里也能有这样的节点控制该有多好!不要急,就给您讲~ 使用Processing里的translate(),rotate(),scale()函数就可以模拟上述的控制效果。我们可以从官方的文档里查看介绍。
https://processing.org/reference/translate_.html ---translate()
https://processing.org/reference/rotate_.html ---rotate()
https://processing.org/reference/scale_.html ---scale()
打开Processing IDE ,比如想绘画一个矩形,置于画布(100,50)位置上,其他属性不变,键入如下代码:
translate(100,50);rotate(0);scale(1);rect(0,0,200,150);
注意rect()函数的参数填写。第一,第二个参数用来控制矩形绘制的起始点,这个例子里用了(0,0)点作为起始点,那为何画出来的效果是我们要的?答案就在translate()函数。这个函数可以重新定义所有绘画的起始点,也就是绘画的偏移量。假如再画一个方框,rect(50,50,100,100),那这个方框的起始点其实是在(150,100)点上,把translate()的偏移量叠加。
定义(0,0)点作为起始点再加上偏移量就可得到最终的(100,50)的位置。不用旋转,所以rotate()函数参数写0(括号里面因填写弧度制的值,因此用角度值开控制要加上radians(deg)函数)。缩放值也不用修改,1作为缩放量,即原有的大小。
如图:
如果再绘画第二个方框,位置设在(50,300),键入
translate(50,300);rotate(0);scale(1);rect(0,0,200,150);
得到如图效果:
发现并不是理想的效果。原因在于translate偏移量会累加,绘画的总体起始点实际上从(0,0)变化到了(150,350)。从而画出的第二个方框的起始点实在(150,350)上。那如何处理呢?
可以在每次变化偏移量时,给一对出入堆栈的函数:pushMatrix() 和 popMatrix()。这一套函数可以使偏移的量或是其他量,相对独立开来,不影响上下的值大小,具体原理此处不去阐述。
So,我们在画每一个图形时加上这一对函数,即:
pushMatrix(); translate(100, 50); rotate(0); scale(1); rect(0, 0, 200, 150); popMatrix(); pushMatrix(); translate(50, 300); rotate(0); scale(1); rect(0, 0, 200, 150); popMatrix();
得:
再如添加一个圆,放在中心,就可以这样编写:
pushMatrix(); translate(width/2, height/2); rotate(0); scale(1); ellipse(0, 0, 150, 150); popMatrix();
得到如图效果:
如果我们想在此基础上上图形产生偏移,就可在原本绘画函数参数里面进行变动,如rect()里定义的起始点,可以改成非(0,0)。但是不建议这样做。更有效控制的方法应该是再加入translate()命令来间接控制,比较妥当,便于往后繁多图形的控制。读者可以试修改rotate()和scale()里的参数看看效果如何。这样就可以模拟Unity里控制object的效果了。
下节补充介绍使用这种方法控制的益处和小案例。
- Processing 高效控制管理图形方法(一)
- Processing 高效控制管理图形方法(二)
- (一)利用processing创建基本图形
- Processing学习(一)
- 初学processing(一)
- 揭秘搜狗手机浏览器测试高效管理方法(一)
- processing.js 学习(一)
- (五)利用processing响应外界输入并控制图形的显示和移动
- 位图管理、图片下载缓存、管理图片内存(一) 高效展示图片系列概述
- 《爱上Processing》教学笔记(一)
- 用Processing构建图形应用程序
- 提高图形高效绘图机制的方法--旧事重拾
- 线程(一)--线程控制-join方法
- Linux进程控制块(Processing Control Block)
- 软件开发管理与质量控制(一)
- mysql学习笔记一(数据库管理控制)
- java--图形管理(2)
- Forefront Identity Manager 2010高效身份管理 (04): Forefront Identity Manager 2010 架构介绍(一)
- 亿级Web系统搭建——单机到分布式集群
- [LeetCode]283. Move Zeroes
- PHP7性能全速前进(翻译)
- MongoDB, Cassandra, 和 HBase -- 三种NoSQL数据库比较(翻译)
- 2016-2017创新创业项目-双决策树的数据选择改进算法
- Processing 高效控制管理图形方法(一)
- Web系统大规模并发——电商秒杀与抢购
- PHP7和HHVM的性能之争介绍
- Apache的三种MPM模式比较:prefork,worker,event
- POJ 3258
- OProfile分析服务的瓶颈和CPU100%问题的利器
- Nginx的TCP负载均衡介绍
- IntelliJ IDEA 2016激活码
- 高并发Web服务的演变——节约系统内存和CPU