Processing 网格纹理制作(棋盘格)
写在前面的话
很久没有写博文了。最近在整理Processing有关文档,看到之前做的一些例子,想着分享在互联网上,当然和以前一样,目前也仅为了给初学者有个学习参考,笔者能力有限。废话不多说,干就完事了。
来做个纹理怎么样?基本纹理很多样式,我们慢慢尝试去实现,今天搞一个网格纹理,准确的说是棋盘格,就像下图所示:

开始
首先写好Processing该有的样子,定义settings(),setup(),draw()等函数:
void settings(){
size(800,800);
}
void setup() {
}
void draw() {
}
这个settings()我会单独去做讲解,这里简单说一下:它是早于setup()初始化的处理函数,有点像Unity脚本系统中Start()和Awake()的关系,但是逻辑层面是不一样的。很多PApplet类中的函数在这里是不能被调用的,除了size()和smooth()两个函数。而且,一旦写了settings(),就必须得把上述两个函数写在settings()里头!大家以后都可以养成习惯这么去填写,因为Processing系统这么设定,有它的道理,不过如果是纯碎学习,那不码这个settings()也无妨。还有个值得说的,因为只是要做个图,其实draw()没必要写上。
小试牛刀
我们先试一试画一个矩形框,如下:
noStroke();
fill(255);
rect(150,150,100,100);
这样会在画布上出现一个白色矩形框,ok,接下来要做的是把这个事情给过程化(面向过程),写个函数封装其过程:
void drawRect(int c, int x, int y, int w, int h) {
noStroke();
fill(c);
rect(x, y, w, h);
}
drawRect()可以被传入五个参数,分别代表其颜色、坐标信息x,y、矩形长宽大小。为什么能这么去封装它,这要求思考问题本身。细细观察棋盘格的特点,黑白方块相隔,如果抽象出它的属性,那么就不难想得到有诸如上述的参数,我们把它称之为属性(当然这个说法其实是不严谨的,因为现在我们的编程思路仅仅是面向过程,在OOP面向对象中这个特点会更加明显)[哦对,有读者感兴趣的话也能找找有关函数式编程的资料,绝对会让你开拓眼界,在思考问题的方式上会有不一样的感受哦,参考https://www.zhihu.com/question/28292740?sort=created]。
再接再厉
有了这个函数就可以在外头传进参数来绘制想要的结果,那问题来了,如何传进去?首先是颜色,颜色好办,
int c = color(200,20,20); //这里可以将color类型看成是int 类型,其实在计算机里颜色这概念也就是一个数值而已
这样就结束了。然后是位置,如果你之前学过或者感受过循环结构(编程是要多多感受的,你说编程有没有套路,其实很多时候是可以凭经验办事的),那么就不难想到两个for循环遍历来绘制布满整个画布的图形的例子,那在这里,同样是做这样的处理(这就是所谓的算法):
for (int x = 0; x < width; x += increW)
{
for (int y = 0; y < height; y += increH)
{
int c = color(255);
drawRect(c, x, y, increW, increH);
}
}
而对于矩形大小,我们做一假设,设想要在画布上绘制10*10个方块阵列,那么每个方块的大小,即位置偏移增量increW和increH(increment表示增量,一般我们会使用常用的英文缩写定义变量名)就可以这么计算得出:
increW = width / WCOUNT; // WCOUNT、HCOUNT代表数量10、10 你可以写成 increW=width/WCOUNT;这样,没问题!
increH = height / HCOUNT; // 但是养成良好的编程习惯和修养,加上些空格,你自己也觉得便于阅读,还haokanmeiguan
在for语句的第三个表达式中写明x自加increW,y自加increH,得到的结果便是每次传入drawRect()函数中的位置有了相应偏移,大小也有了定义,即每次位移的数值。如果你按照这一步骤敲码执行,你会得到全白的画布,为什么呢?很简单,事实上Processing已经帮你绘制了这么多方块,只是颜色统一,位置统一,完美无瑕得散步在画布上了,没有任何缝隙。而要想实现间隔黑白效果,是不是还得加上黑色方块呢。是的,就得是要绘制这样的rect:
noStroke();
fill(0);
rect(150,150,100,100);
但是,如何把它整合在for循环体里呢?这就又要谈到简单的算法技巧,我们可以引入一个开关变量来处理间隔绘制不同颜色的流程,对于"开关变量"这一说法,读者请参考https://blog.csdn.net/fddxsyf123/article/details/62848357这一篇之前写的。在这里你脑力应是如下的逻辑:
if(k == 0)
{
fill(255);
rect(150,150,100,100);
}
if(k == 1)
{
fill(0);
rect(150,150,100,100);
}
结成正果
我们进一步把它简化,看成是奇数和偶数差别,这样只要定义一个int值,每次绘画完毕,相当于状态要改变了,就得切换,这个值自加一个值或者自减就可以达成了。有机整合进循环体,可以这样表示:
int k = 0; // k代表状态,具体数值代表什么意思得看上下文
int c = 0;
for (int x = 0; x < width; x += increW)
{
for (int y = 0; y < height; y += increH)
{
if(k % 2 == 0) //注意这个判断条件是关键的,判断是否被2整除,如果真,则是偶数,反之奇数,这就达成了两种状态互切效果
c = color(255);
else
c = color(0);
drawRect(c, x, y, increW, increH);
k++; //一个状态完毕,切换
}
k++; //现在是一列一列遍历绘制,因此没换一列也得切换状态,形成棋盘网格效果
}
好了基本图形已经展现出来了~~~ 完整代码如下:
int increW;
int increH;
int WCOUNT = 10;
int HCOUNT = 10;
void drawRect(int c, int x, int y, int w, int h) {
noStroke();
fill(c);
rect(x, y, w, h);
}
void settings() {
size(800, 800);
}
void setup() {
increW = width/WCOUNT;
increH = height/HCOUNT;
int k = 0;
int c = 0;
for (int x = 0; x < width; x += increW)
{
for (int y = 0; y < height; y += increH)
{
if (k % 2 == 0)
c = color(255);
else
c = color(0);
drawRect(c, x, y, increW, increH);
k++;
}
k++;
}
}
void draw() {
}
呈现的效果

写在最后的话
好久没写了,是该多分享多交流,我会同步更新于CSDN上,请多多支持鼓励,有问题留言,感谢。
Processing 网格纹理制作(棋盘格)的更多相关文章
- Processing 网格纹理制作(棋盘格)使用pixel() set()像素点绘制方式
接上 我们趁热打铁,紧接上一回的棋盘格绘制,来挖掘一些不同绘制思路,使用pixel()函数来绘画.这是一个以每个像素点作为对象来绘制的思路,而不是以图形的方式来填充.这就改变了绘画思路.实际上,Pro ...
- Processing 网格(棋盘格)无限偏移纹理动画
过火 再度出击!这次我们要玩得更火一点---把静帧变动画.没错,将棋盘格动起来!看一下效果: 这是一个经典的无限偏移动画,在很多2d横版射击游戏中都会采用的技术.如何在Processing中实现,有两 ...
- 网格UV展开
原文链接 UV展开是什么 参数曲面的参数域变量一般用UV字母来表达,比如参数曲面F(u,v).所以一般叫的三维曲面本质上是二维的,它所嵌入的空间是三维的.凡是能通过F(u,v)来表达的曲面都是参数曲面 ...
- VR制作的规格分析
因为UE4的演示资源更丰富一些,我这边把UE4的有代表性的演示都跑了一遍,同时也通过Rift确认效果,和里面的资源制作方式. 首先,UE4是基于物理渲染的引擎,大部分都是偏向图像真实的.使用的材质 ...
- 【Unity Shaders】学习笔记——SurfaceShader(六)混合纹理
[Unity Shaders]学习笔记——SurfaceShader(六)混合纹理 转载请注明出处:http://www.cnblogs.com/-867259206/p/5619810.html 写 ...
- axure网格设置
Axure默认的界面是没有吧网格显示出来,没有网格在制作原型的时候,对齐方面不是很好,个人习惯还是把网格显示出来,便于组件对齐和布局. 其实本来这篇文章应该叫做网格与参考线,只是本人对参考线的应用还很 ...
- 【Unity Shader】(八) ------ 高级纹理之立方体纹理及光线反射、折射的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) -- ...
- ZBrush软件Texture纹理调控板
在zbrush4r8中对一个模型进行纹理制作在速度和易用性方面有诸多优势,通过Texture调控板创建.导入和输出纹理是及其方便且快捷的. Import (导入):导入Photoshop (.psd) ...
- 3D建模服务提供更高效、专业的3D制作能力,“筑”力开发者
3D建模服务(3D Modeling Kit)是HMS Core在图形图像领域又一技术开放.3D建模产品的定位就是要做快速.简洁.低成本的3D制作能力,并陆续开放给有3D模型.动画游戏制作等能力诉求的 ...
随机推荐
- 小白一样能建站——winser2012 IIS8.0搭建基本的网站
在window server 2012环境下,搭建一个基本的 网站.能够使用即可. 打开服务器管理器 添加角色和功能 默认下一步 下一步, 下一步,选择web服务器 添加功能 下一步, 下一步,不安装 ...
- 纯CSS3图片反转
一些简单实用的小技巧,CSS3对图片进行翻转,显示另一面的文字,或者图片效果,那么具体怎样去做呢?一起来看看吧. 在CSS3中,可以使用transform-style: preserve-3d进行3d ...
- SpringMVC实例及注解(二)
@RequestMapping()除了修饰方法,还可以修饰类1.类定义处:提供初步的请求映射信息.相对于WEB应用的根目录2.方法处:提供进一步的细分映射信息.相对于类定义处的URL.若类定义处未标注 ...
- 0 mysql 安装
1 安装网址 https://dev.mysql.com/downloads/installer/ 选择 mysql server版本一路next 2.配置环境 mysql 默认安装位置是: C:\P ...
- python简介以及简单代码——python学习笔记(一)
学习来源:https://www.liaoxuefeng.com/wiki/1016959663602400 了解python 简单编写并实现python代码 命令行模式和python交互模式 了解p ...
- 跟着尚硅谷系统学习Docker-【day08】
day08-20200723 p32.docker 安装redis [ docker pull redis] [docker run -p 6397:6397 -v /tmp/mydocker ...
- Spring security OAuth2.0认证授权学习第二天(基础概念-RBAC)
RBAC 基于角色的访问控制 基于角色的访问控制用代码实现一下其实就是一个if的问题if(如果有角色1){ } 如果某个角色可以访问某个功能,当某一天其他的另一个角色也可以访问了,那么代码就需要变化, ...
- Python3 字典浅析
Python 字典 字典(Dictionary) 字典是一个无序.可变和有索引的集合.在 Python 中,字典用花括号编写,拥有键和值. 实例 创建并打印字典: thisdict = { " ...
- JVM性能调优(1) —— JVM内存模型和类加载运行机制
一.JVM内存模型 运行一个 Java 应用程序,必须要先安装 JDK 或者 JRE 包.因为 Java 应用在编译后会变成字节码,通过字节码运行在 JVM 中,而 JVM 是 JRE 的核心组成部分 ...
- python基础:多进程、多线程
一.定义和区别 1.一个任务就是一个进程,进程就是资源的集合.比如打开浏览器,启动一个进程.当一个进程需要干很多事的时候,就需要执行多个子任务,这些子任务就是线程. 2.线程是包含在进程中的,每个进程 ...