手绘与码绘对比——从画小人开始

2023-10-20 12:59

本文主要是介绍手绘与码绘对比——从画小人开始,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

手绘与码绘对比——从画小人开始

本文主要记录自己第一次以手绘作品为原型,用代码画画的过程以及体会。
一.手绘VS码绘

在这里插入图片描述
完成时长:10分钟
工具:钢笔,A4纸
效果:人物脸部的线条不匀称,线条不流畅,眼睛不够有神。
创作体验:整个过程完成很快,在画的过程中是很享受的,对笔的使用相比电脑来说很流利,但看到画完的效果会有点羞愧。

码绘作品
完成时长:8小时
工具:processing
效果:整个效果比手绘,线条流畅,人物表情也很生动,有色彩,不过额头上那条未消隐的线影响了整体的美观
创作体验:全过程很慢,而且很痛苦,由于所有的线条都是用Bezier曲线一条条加上去,然后一个个控制点修改的所以花的时间很多而且很痛苦,不过实现后很有成就感。

二.分析与总结
相同点:
在画图之前都要考虑身体比例大小,以及空间透视关系,如在这张图中人是侧着的,画之前是希望头比身子要大一点,所以在两幅图中都是能体现这些的,编程画图和手绘画图还有一个共同之处是,画的顺序大致一样,画头的时候先把脸的轮廓画出来,然后再画五官,画身体的时候也是先画左手然后是身体然后是右手。
不同点:
1.画头和手的顺序不同,编程画的图由于要考虑到后面填充的颜色会覆盖前面填充的颜色,因此先画头的话后面画的身体可能会遮住脸的部分,所以编程的时候是先执行画身体的代码,而在手绘的过程中就不会考虑到这些,是按照从上而下的顺序来画。
2.编程画图比手绘更精确一点,编程画画时需要确定圆心,曲线起始点的位置等等,这些都是通过事先计算加上根据效果调整得到的,而手绘的话主要就是根据感觉走,在下笔之前先确定大概轨迹,一旦手没有掌控很好的话,也不能做很大的调整,而在编程的时候,能够有一些控制点来控制曲线的走向如可以通过控制点控制贝赛尔曲线。
3.编程画画和手绘对设计者的要求不同,手绘时,我需要对画的内容仔细的观察,然后根据感觉以及经验来画,而在编程画画是,首先需要会编程,其次我需要告诉计算机要画的东西的具体坐标是什么,这就需要处理不同位置之间的关系,还有怎么控制曲线的走向,圆的大小等等。
4.编程画图的效果不是实时呈现的,当做了修改后要运行才能看到结果,而手绘的话调整后马上就能看到效果。

三.代码

void setup()
{size(500, 500);background(250);
}void draw()
{drawBody();drawHead();
}void drawHead()
{noStroke();noFill();fill(252, 224, 203);beginShape();vertex(187, 125);bezierVertex(165, 220, 311, 225, 323, 155);endShape();//head and hairnoFill();noStroke();fill(10);noStroke();beginShape();vertex(187, 95);bezierVertex(200, 0, 335, 10, 333, 105);endShape();noFill();fill(252, 224, 203);noStroke();beginShape();vertex(187, 95);bezierVertex(200, 25, 315, 51, 333, 105);endShape();triangle(266, 43, 241, 65, 264, 63);triangle(307, 61, 304, 70, 310, 76);//earbeginShape();vertex(326, 108);bezierVertex(375, 101, 343, 174, 318, 153);endShape();/*stroke(0);strokeWeight(2);beginShape();vertex(322,135);bezierVertex(326,108,343,104,340,138);endShape();*/noStroke();quad(187, 95, 187, 125, 323, 155, 333, 105);//left radianfill(250);beginShape();vertex(187, 95);bezierVertex(191, 100, 197, 115, 187, 125);endShape();//left eye//noFill();//the outerellipse(218, 115, 30, 38);fill(11);ellipse(218, 115, 20, 24);fill(255);ellipse(213, 115, 4, 4);ellipse(219, 110, 7, 7);//right eyeellipse(282, 118, 30, 38);fill(11);ellipse(282, 118, 20, 24);fill(255);ellipse(277, 118, 4, 4);ellipse(283, 113, 7, 7);//left eyebowfill(11);beginShape();vertex(203, 90);bezierVertex(205, 80, 230, 80, 233, 87);endShape();//right eyebowfill(11);beginShape();vertex(264, 90);bezierVertex(275, 80, 295, 89, 297, 97);endShape();//nosenoFill();stroke(0);strokeWeight(2);beginShape();vertex(246, 136);bezierVertex(245, 145, 245, 146, 244, 144);bezierVertex(229, 134, 228, 156, 238, 160);endShape();//mouthbeginShape();vertex(226, 170);bezierVertex(235, 185, 260, 189, 272, 174);//bezierVertex(229,134,228,156,238,160);endShape();//shecknoStroke();fill(247, 200, 207);ellipse(205, 147, 22, 18);ellipse(290, 153, 23, 18);
}void drawBody()
{//bodyfill(247, 201, 60);triangle(272, 174, 212, 276, 334, 280);//fill(255,227,132);stroke(1);strokeWeight(1);beginShape();vertex(318, 230);bezierVertex(323, 238, 335, 278, 323, 280);endShape();beginShape();vertex(237, 264);bezierVertex(243, 285, 285, 278, 302, 250);endShape();noStroke();fill(255, 153, 18);triangle(239, 195, 216, 230, 239, 254);   //left armtriangle(305, 250,273,280,312,280);fill(255, 153, 18);stroke(1);strokeWeight(1);beginShape();vertex(305, 250);bezierVertex(307, 255, 305, 274, 312,280);endShape();fill(255, 227, 132);beginShape();vertex(227, 242);bezierVertex(217, 250, 225, 274, 230,279);endShape();fill(255, 153, 18);noStroke();quad(239, 195, 239, 254, 297, 238, 277, 195);quad(277, 195, 302, 250, 327, 230, 297, 174);stroke(1);strokeWeight(1);beginShape();vertex(216, 230);bezierVertex(217, 245, 236, 260, 239, 254);endShape();line(239, 195, 216, 232);line(239, 225, 237, 279);beginShape();vertex(239, 254);bezierVertex(243, 265, 276, 260, 297, 238);endShape();beginShape();vertex(302, 250);bezierVertex(315, 249, 326, 245, 327, 230);endShape();beginShape();vertex(297, 174);bezierVertex(305, 189, 316, 205, 327, 230);endShape();beginShape();vertex(285, 216);bezierVertex(288, 220, 305, 245, 302, 250);endShape();
}

这篇关于手绘与码绘对比——从画小人开始的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/247228

相关文章

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

类的load方法和initialize方法对比

1. load方法在main()之前被调用,而initialize方法在main()之后调用 load方法实际是在load_images过程中被调用的。load_images会将当前应用依赖的所有镜像(动态库)加载到内存,在在加载中首先是对镜像进行扫描,将所有包含 load 方法的类加入列表 loadable_classes ,然后从这个列表中逐一调用其所包含的 load 方法。 +[XXCl

JavaScript正则表达式六大利器:`test`、`exec`、`match`、`matchAll`、`search`与`replace`详解及对比

在JavaScript中,正则表达式(Regular Expression)是一种用于文本搜索、替换、匹配和验证的强大工具。本文将深入解析与正则表达式相关的几个主要执行方法:test、exec、match、matchAll、search和replace,并对它们进行对比,帮助开发者更好地理解这些方法的使用场景和差异。 正则表达式基础 在深入解析方法之前,先简要回顾一下正则表达式的基础知识。正则

【HarmonyOS】-TaskPool和Worker的对比实践

ArkTS提供了TaskPool与Worker两种多线程并发方案,下面我们将从其工作原理、使用效果对比两种方案的差异,进而选择适用于ArkTS图片编辑场景的并发方案。 TaskPool与Worker工作原理 TaskPool与Worker两种多线程并发能力均是基于 Actor并发模型实现的。Worker主、子线程通过收发消息进行通信;TaskPool基于Worker做了更多场景化的功能封装,例

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,

claude和chatgpt对比:哪一个更适合你?

前言 我们都知道,Claude和ChatGPT都是当前人工智能领域中备受关注的对话生成模型,作为国外AI模型两大巨头,好像他们的实力都不相上下呀! 这时就会有很多同学疑惑,那我如果想选择AI,到底是选择Claude,还是ChatGPT呢?哪个更好呢?他们之间有什么不同独特的地方呢?他们又分别适合在哪些场景使用呢? 技术背景 Claude是由Anthropic公司开发的高性能模型,而Chat

算法复杂度 —— 数据结构前言、算法效率、时间复杂度、空间复杂度、常见复杂度对比、复杂度算法题(旋转数组)

目录 一、数据结构前言 1、数据结构 2、算法 3、学习方法 二、 算法效率 引入概念:算法复杂度  三、时间复杂度 1、大O的渐进表示法 2、时间复杂度计算示例  四、空间复杂度 计算示例:空间复杂度 五、常见复杂度对比 六、复杂度算法题(旋转数组) 1、思路1 2、思路2 3、思路3 一、数据结构前言 1、数据结构         数据结构(D