xxxxxxxxxx
84
let video;
let faceMesh;
let faces = [];
let triangles;
let uvCoords;
let toggle = "OFF";
function preload() {
faceMesh = ml5.faceMesh({ maxFaces: 2 });
//img = loadImage("Zombie_Dan_mesh_map.png");
}
function mousePressed() {
if (mouseX < 100 )
}
function gotFaces(results) {
faces = results;
}
function setup() {
createCanvas(800, 480, WEBGL);
var constraints = {
audio: false,
video: {
mandatory: {
minWidth: 800,
minHeight: 480
}
}
};
video = createCapture(constraints);
video.hide();
faceMesh.detectStart(video, gotFaces);
triangles = faceMesh.getTriangles();
uvCoords = faceMesh.getUVCoords();
textureMode(NORMAL);
}
function draw() {
scale(-1,1);
translate(-width / 2, -height / 2);
background(0);
image(video, 0, 0);
if (faces.length == 2) {
let face1 = faces[0];
let face2 = faces[1];
texture(video);
noStroke();
beginShape(TRIANGLES);
for (let i = 0; i < triangles.length; i++) {
let tri = triangles[i];
let [a, b, c] = tri;
let pointA1 = face1.keypoints[a];
let pointB1 = face1.keypoints[b];
let pointC1 = face1.keypoints[c];
let pointA2 = face2.keypoints[a];
let pointB2 = face2.keypoints[b];
let pointC2 = face2.keypoints[c];
//let uvA = uvCoords[a];
//let uvB = uvCoords[b];
//let uvC = uvCoords[c];
//vertex(pointA.x, pointA.y, uvA[0], uvA[1]);
//vertex(pointB.x, pointB.y, uvB[0], uvB[1]);
//vertex(pointC.x, pointC.y, uvC[0], uvC[1]);
vertex(pointA1.x, pointA1.y, pointA2.x/width, pointA2.y/height);
vertex(pointB1.x, pointB1.y, pointB2.x/width, pointB2.y/height);
vertex(pointC1.x, pointC1.y, pointC2.x/width, pointC2.y/height);
vertex(pointA2.x, pointA2.y, pointA1.x/width, pointA1.y/height);
vertex(pointB2.x, pointB2.y, pointB1.x/width, pointB1.y/height);
vertex(pointC2.x, pointC2.y, pointC1.x/width, pointC1.y/height);
}
endShape();
}
}