1. 程式人生 > >vivi橙的搬磚之旅(一) 使用P5.js畫一幅圖

vivi橙的搬磚之旅(一) 使用P5.js畫一幅圖

手繪vs碼繪

使用P5.js畫一幅圖

程式設計師的世界可不僅僅只有一串串的程式碼,有時候程式碼也可以繪製出一幅幅美麗的作品。這篇文章就用來記錄我的第一篇碼繪作品。

準備工作

相信大多數程式設計師像我一樣,在動手寫程式碼碼繪之前不知道該畫些什麼。於是我在一些網站上找了一些素材。在尋找素材過程中,我更偏向於線條簡單、圖形規整的圖片。這樣繪製起來可能更容易上手。最後,我決定試試用程式碼實現下圖。
在這裡插入圖片描述

開始繪畫

1、不管是手繪還是碼繪,我們首先需要的是一張畫布。手繪時找到一張紙即可,而碼繪則需要幾行程式碼建立一個畫布。

function setup() {  
createCanvas(640,480);  }

2、畫布找好了我們就要開始繪製了。這一步是在draw中進行。
首先要把背景填充好。

background('rgb(0,123,255)');

在我們手繪時,一般是先畫好線條然後進行上色。而P5.js有所不同,它允許我們提前設定好顏色,在形狀確定後直接將顏色填充進去

fill('rgb(255,255,255)');//填充白色  
quad(213,70,426,70,426,410,213,410)

在整個繪製過程中,涉及到p5.js中一些圖形繪製函式的呼叫。大都很簡單,可以通過官方案例很快上手。具體的繪製部位我就不詳細說明了,直接貼程式碼。

fill('rgb(0,123,255)');// 填充藍色  
arc(319, 410, 210, 210, PI , TWO_PI, OPEN);  
fill('rgb(255,255,255)');//白色臉頰及眼白  
arc(319, 410, 160, 110, PI , TWO_PI, OPEN);  
ellipse(300,370,45,50);  
ellipse(345,370,45,50);  
fill('rgb(0,0,0)');//黑色眼珠  
ellipse(305,370,15,15);  
ellipse(340,370,15,15);  
fill('rgb(255,255,255)');//區域性白色眼睛  
ellipse(303,367,10,5);  
ellipse(339,367,10,5);  
strokeWeight(2); 
line(323,401,323,410);//鬍鬚  
line(363,400,415,390);  
line(283,400,231,390);  
fill('rgb(255,0,5)');//紅色鼻子  
ellipse(323,390,25,25);  
fill('rgb(223,223,0)');//黃色竹蜻蜓 
arc(323, 308, 30,30, PI , TWO_PI, OPEN);  
rect(320,240,6,60,20);
ellipse(324,245,20,10);  
ellipse(324,245,10,3);  
noFill();  
ellipse(324,245,120,60);  
arc(323, 245, 40,20, PI, PI + QUARTER_PI);  
arc(323, 245, 60,30, PI, PI + QUARTER_PI);  
arc(323, 245, 80,40, PI, PI + QUARTER_PI);  
arc(323, 245, 100,50, PI, PI + QUARTER_PI);
arc(323, 245, 40,20, TWO_PI, TWO_PI + QUARTER_PI); 
arc(323, 245, 60,30, TWO_PI, TWO_PI + QUARTER_PI);  
arc(323, 245, 80,40, TWO_PI, TWO_PI + QUARTER_PI);  
arc(323, 245, 100,50, TWO_PI, TWO_PI + QUARTER_PI);

在繪製過程中,一定要考慮到圖層覆蓋的問題。我們手繪時可以將多餘的部分擦去,而碼繪卻只能一層層覆蓋。所以不能被遮擋的部位最後繪製。
3、自由發揮階段。在將臨摹圖中大致復刻好後,我想加一點別的東西進去。
文字

fill(0,123,255)  
textSize(24);  
textStyle(BOLD); 
text('Doraemon',265,160)

哆啦A夢的小鈴鐺

translate(200,50);  
ling();
function ling(){    
fill('rgb(195,195,0)');    
ellipse(123,390,45,45);    
bezier(100, 385, 117, 375, 127, 375, 143, 385);    
bezier(99, 390, 117, 380, 127, 380, 145, 390);    
fill(0,0,0)    
ellipse(123,395,10,10);    
line(123,400,123,410);  }

大功告成

好啦,這樣一個簡單可愛的哆啦A夢就在螢幕上顯示出來了。在這裡插入圖片描述
我們的題目是手繪VS碼繪,按道理是應該也有手繪作品的。但由於博主的手繪功底實在太差就不放出來讓大家看笑話了。

總而言之,雖然繪製過程中尋找合適的引數非常痛苦,但在最後看到圖片繪製出來的時候成就感還是有的。我們可以看到,碼繪作品的線條更規範。但規範到底好不好呢?這個就看個人想法啦。像博主這種手殘黨能夠碼繪出規整不難看的圖片已經心滿意足。而博主的大佬室友肯定會嫌棄線條太過於生硬死板,不如自己手繪來得痛快美觀。

好啦,不多說了,繼續搬磚去了!下篇部落格見~