|
/* |
|
* This file should contain code that draws your faces. |
|
* |
|
* Each function takes parameters and draws a face that is within |
|
* the bounding box (-10, -10) to (10, 10). |
|
* |
|
* These functions are used by your final arrangement of faces as well as the face editor. |
|
*/ |
|
|
|
function drawFace1(headscale, headscale1, cheeklocation, eyelocax, eyesize, mouth_value, |
|
a_Value, mouthshape,cheeksize, faceColor, mouthmode, hatwidth) { |
|
|
|
angleMode (DEGREES); |
|
rectMode (CENTER); |
|
|
|
//head shape reference (https://editor.p5js.org/zygugi/sketches/BJHK3O_yM) |
|
//draw head |
|
strokeWeight(0.2); |
|
fill(64, 93, 132); |
|
var yoff = 0; |
|
var radius = 10; |
|
|
|
beginShape(); |
|
var xoff = 0; |
|
const orange = color (237, 124, 64); |
|
const blue = color (64, 93, 132); |
|
if(faceColor == 1) { |
|
fill(blue); |
|
} |
|
else { |
|
fill(orange);} |
|
|
|
for (var a = 0; a < 360; a += a_Value) { |
|
var offset = map(noise(xoff, yoff), 0, 1, -2, 1); |
|
var r = radius + offset; |
|
var x = headscale*r * cos(a); |
|
var y = headscale1*r * sin(a); |
|
vertex(x, y); |
|
xoff += 0.01; |
|
} |
|
endShape(CLOSE); |
|
|
|
yoff += 0.1; |
|
|
|
//eye |
|
fill(5, 17, 38); |
|
ellipse(eyelocax, -3, eyesize); |
|
ellipse(-eyelocax, -3, eyesize); |
|
|
|
//glasses |
|
fill(5, 17, 38, 80); |
|
noStroke(); |
|
square(-eyelocax, -3, -eyelocax-1 ,1.5, 1, 1, 1); |
|
square(eyelocax, -3, eyelocax+1 ,1.5, 1, 1, 1); |
|
stroke(0); |
|
strokeWeight(0.2); |
|
line(-eyelocax+1.6, -3, eyelocax - 1.6, -3); |
|
|
|
|
|
// cheek red |
|
fill(212, 118, 108); |
|
ellipse(-cheeklocation, 3, 3, cheeksize); |
|
ellipse(cheeklocation, 3, 3, cheeksize); |
|
|
|
//mouth |
|
var mouthmode; |
|
if (mouthmode == 1){ |
|
//draw smile mouth shape |
|
beginShape(); |
|
vertex(-mouthshape, 5); |
|
bezierVertex(-mouthshape, 5, 0.5, mouth_value, mouthshape, 5); |
|
bezierVertex(mouthshape, 5, 0.5, 9, -mouthshape, 5); |
|
endShape(); |
|
} else { |
|
//draw 'O' shape mouth shape |
|
ellipse(0, 5, 1, 2); |
|
} |
|
|
|
|
|
//nose |
|
noStroke(); |
|
fill(154, 72, 0); |
|
triangle(0, -1, -0, 2, 1, 2); |
|
|
|
//hat |
|
if(faceColor == 1) { |
|
fill(orange); |
|
} |
|
else { |
|
fill(blue);} |
|
stroke(0); |
|
strokeWeight(0.15); |
|
arc(0, -6, hatwidth, 12, 180, 360); |
|
rect(0, -6, hatwidth+5, 2); |
|
|
|
|
|
} |
|
|
|
function drawFace2 (headscale, headscale1, a_Value, faceColor, eyex, eyesize, |
|
eyelocation,curly) { |
|
|
|
|
|
//Face color |
|
const green = color (112, 142,125); |
|
const yellow = color (243, 187, 75); |
|
const blue = color (98, 168, 172); |
|
const orange = color (201, 151, 80); |
|
|
|
strokeWeight(0.1); |
|
|
|
//face colors |
|
if(faceColor == 1) { |
|
fill(yellow); |
|
} |
|
else if (faceColor==2) { |
|
fill(green); |
|
} |
|
else if (faceColor==3) { |
|
fill(orange); |
|
} |
|
else if (faceColor == 4) { |
|
fill(blue); |
|
} |
|
|
|
// draw head |
|
var yoff = 0; |
|
var radius = 10; |
|
|
|
strokeWeight(0.1); |
|
|
|
|
|
beginShape(); |
|
var xoff = 0; |
|
for (var a = 0; a < 360; a += a_Value) { |
|
var offset = map(noise(xoff, yoff), 0, 1, -0.5, 1); |
|
var r = radius + offset; |
|
var y = headscale*r * sin(a); |
|
var x = headscale1*r * cos(a); |
|
vertex(x, y); |
|
xoff += 0.01; |
|
} |
|
endShape(CLOSE); |
|
|
|
yoff += 0.01; |
|
|
|
|
|
|
|
|
|
//eyes/////////// |
|
var eyelocation; |
|
if (eyelocation == 1) { //draw left eyes, left profile |
|
|
|
fill(20); |
|
beginShape(); |
|
var xoff = 0; |
|
|
|
for (var a = 0; a < 150; a += a_Value) { |
|
var offset = map(noise(xoff, yoff), 0, 1, -1, 1); |
|
var r = radius + offset; |
|
var y = headscale*r * sin(-a); |
|
var x = headscale1*r * cos(-a); |
|
vertex(x, y); |
|
xoff += 0.01; |
|
} |
|
endShape(); |
|
yoff += 0.01; |
|
|
|
//facial color |
|
if(faceColor == 1) { |
|
fill(yellow); |
|
} |
|
else if (faceColor==2) { |
|
fill(green); |
|
} |
|
else if (faceColor==3) { |
|
fill(orange); |
|
} |
|
else if (faceColor == 4) { |
|
fill(blue); |
|
} |
|
|
|
//eyes |
|
arc (-eyex, -2, 3, 2, 0, 180); |
|
arc (-8.4, -2, eyesize, 2, 0, 110); |
|
|
|
fill(0); |
|
arc (-eyex, -2, 1.5, 1, 0, 180); |
|
arc (-8.4, -2, eyesize/2 ,1, 0, 110); |
|
|
|
//mouth |
|
fill(212, 113, 113); |
|
stroke(0); |
|
quad (-8, 2, -6, 2, -7, 4, -8, 4); |
|
noFill(); |
|
strokeWeight(0.2); |
|
translate(6, 0); |
|
stroke(20); |
|
|
|
//curly hair |
|
translate(0, 3); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
rotate(-180); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
|
|
|
|
translate(2, 0); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
rotate(-180); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
translate(1, 0); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
rotate(-180); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
|
|
translate(3, 0); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
rotate(-180); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
|
|
translate(-2, 0); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
rotate(-180); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
} |
|
else if (eyelocation == 2){ //draw right profile |
|
|
|
fill(20); |
|
beginShape(); |
|
var xoff = 0; |
|
|
|
for (var a = 0; a < 150; a += a_Value) { |
|
var offset = map(noise(xoff, yoff), 0, 1, -1, 1); |
|
var r = radius + offset; |
|
var y = (headscale)*r * sin(-a); |
|
var x = (-headscale1)*r * cos(a); |
|
vertex(x, y); |
|
xoff += 0.01; |
|
} |
|
|
|
endShape(); |
|
|
|
yoff += 0.01; |
|
|
|
//eye color |
|
if(faceColor == 1) { |
|
fill(yellow); |
|
} |
|
else if (faceColor==2) { |
|
fill(green); |
|
} |
|
else if (faceColor==3) { |
|
fill(orange); |
|
} |
|
else if (faceColor == 4) { |
|
fill(blue); |
|
} |
|
|
|
|
|
//eyes |
|
arc (eyex, -2, 3, 2, 0, 180); |
|
arc (8.4, -2, eyesize, 2, 70, 180); |
|
|
|
fill(0); |
|
arc (eyex, -2, 1.5, 1, 0, 180); |
|
arc (8.4, -2, eyesize/2 ,1, 70, 180); |
|
|
|
//Mouth |
|
fill(212, 113, 113); |
|
quad (8, 2, 6, 2, 7, 4, 8, 4) |
|
|
|
|
|
//curly hair |
|
noFill(); |
|
strokeWeight(0.2); |
|
stroke(20); |
|
|
|
translate(0, 3); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
rotate(-180); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
|
|
|
|
translate(2, 0); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
rotate(-180); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
translate(1, 0); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
rotate(-180); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
|
|
translate(3, 0); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
rotate(-180); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
|
|
translate(-2, 0); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
rotate(-180); |
|
bezier(-0, 0, -curly, 1, curly, 3, -1, 5); |
|
|
|
|
|
} |
|
|
|
} |
|
|
|
function drawFace3 (face3x, face3y, face3xbo, face3ybo, eyebrownx, eyebrowny, |
|
eyex, eyey, faceColor, eyewidth) { |
|
rectMode(RADIUS); |
|
strokeWeight(0.2); |
|
|
|
//face colors |
|
const darkgreen = color (22, 37, 47); |
|
const green = color (54, 79, 88); |
|
const yellow = color (216, 163, 62); |
|
const dark_blue = color (47, 51, 42); |
|
|
|
strokeWeight(0.1); |
|
|
|
|
|
if(faceColor == 1) { |
|
fill(yellow); |
|
} |
|
else if (faceColor==2) { |
|
fill(darkgreen); |
|
} |
|
else if (faceColor==3) { |
|
fill(green); |
|
} |
|
else if (faceColor == 4) { |
|
fill(dark_blue); |
|
} |
|
|
|
|
|
//head |
|
quad(-face3x, -face3y, face3x, -face3y, face3xbo, face3ybo, -face3xbo, face3ybo); |
|
|
|
fill(10); |
|
//eyebrown |
|
stroke(0); |
|
fill(12, 18, 26); |
|
push(); |
|
translate(eyebrownx, eyebrowny); |
|
quad(-8, -7, -5, -7, -5, -8, -10, -8); |
|
pop(); |
|
|
|
push(); |
|
translate(-eyebrownx, eyebrowny) |
|
quad(8, -7, 5, -7, 5, -8, 10, -8); |
|
pop(); |
|
|
|
//mouth |
|
fill(57, 19, 25); |
|
push(); |
|
strokeWeight(0.5); |
|
translate(0, 2); |
|
scale(0.1); |
|
quad(-face3x, -face3y+5, face3x, -face3y+5, face3xbo, face3ybo-5, -face3xbo, face3ybo-5); |
|
pop(); |
|
|
|
//eye |
|
ellipse(eyex, eyey, eyewidth, 0.7); |
|
ellipse(-eyex, eyey, eyewidth, 0.7); |
|
//Pupil |
|
fill(0); |
|
ellipse(eyex, eyey, eyewidth-1 ,0.7); |
|
ellipse(-eyex, eyey, eyewidth-1 ,0.7); |
|
|
|
//hair |
|
quad(-4, -face3y, 4, -face3y, 3, -face3y + 1.5, -3, -face3y + 1.5); |
|
stroke(20); |
|
quad(-3, -face3y, 3, -face3y, 2, -face3y + 1.5, -2, -face3y + 1.5); |
|
quad(-2, -face3y, 2, -face3y, 1, -face3y + 1.5, -1, -face3y + 1.5); |
|
quad(-1, -face3y, 1, -face3y, 0, -face3y + 1.5, -0, -face3y + 1.5); |
|
stroke(0); |
|
noFill(); |
|
quad(-4, -face3y, 4, -face3y, 3, -face3y + 1.5, -3, -face3y + 1.5); |
|
|
|
} |
|
|
|
function drawFace4 (face3x, face3y, face3xbo, face3ybo, eyebrownx, eyebrowny, |
|
eyex, eyey, faceColor, eyewidth) { |
|
|
|
rectMode(RADIUS); |
|
strokeWeight(0.2); |
|
|
|
//face colors |
|
const darkgreen = color (38, 46, 31); |
|
const blue = color (71, 96, 103); |
|
const yellow = color (229, 197, 113); |
|
const dark_blue = color (38, 73, 92); |
|
|
|
strokeWeight(0.1); |
|
//face color |
|
if(faceColor == 1) { |
|
fill(yellow); |
|
} |
|
else if (faceColor==2) { |
|
fill(darkgreen); |
|
} |
|
else if (faceColor==3) { |
|
fill(blue); |
|
} |
|
else if (faceColor == 4) { |
|
fill(dark_blue); |
|
} |
|
|
|
|
|
|
|
rotate(facerotate); //rotate head from 30 to -30 degrees |
|
//head |
|
quad(-face3x, -face3y, face3x, -face3y, face3xbo, face3ybo, -face3xbo, face3ybo); |
|
//eyebrown |
|
fill(10); |
|
stroke(0); |
|
fill(12, 18, 26); |
|
push(); |
|
translate(eyebrownx, eyebrowny); |
|
quad(-8, -7, -5, -7, -5, -8, -10, -8); |
|
pop(); |
|
|
|
push(); |
|
translate(-eyebrownx, eyebrowny); |
|
quad(8, -7, 5, -7, 5, -8, 10, -8); |
|
pop(); |
|
|
|
|
|
|
|
//mouth |
|
fill(57, 19, 25); |
|
push(); |
|
strokeWeight(0.5); |
|
translate(-1, 2); |
|
scale(0.1); |
|
rotate(30); |
|
quad(-face3x, -face3y+5, face3x+2, -face3y+5, face3xbo+2, face3ybo-5, -face3xbo, face3ybo-3); |
|
pop(); |
|
|
|
//eye |
|
rect(eyex, eyey, eyewidth-0.8, 0); |
|
rect(-eyex, eyey, eyewidth-0.8, 0); |
|
//Pupil |
|
fill(0); |
|
rect(eyex, eyey-0.5, eyewidth-1 ,0.2); |
|
rect(-eyex, eyey-0.5, eyewidth-1 ,0.3) |
|
|
|
//mole |
|
ellipse(5, 5, 0.5 ,0.5); |
|
|
|
//hair |
|
rect(0, -face3y+1, 3,1); |
|
stroke(20); |
|
rect(0, -face3y+1, 2,1); |
|
rect(0, -face3y+1, 1,1); |
|
rect(0, -face3y+1, 0,1); |
|
|
|
} |