using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Microsoft.Kinect.Face;
public class GetFacePoints : MonoBehaviour {
[Tooltip("Index of the player, tracked by this component. 0 means the 1st player, 1 - the 2nd one, 2 - the 3rd one, etc.")]
public int playerIndex = 0;
private KinectManager manager = null;
private FacetrackingManager faceManager = null;
private Vector3[] faceVertices;
private Dictionary<HighDetailFacePoints, Vector3> dictFacePoints = new Dictionary<HighDetailFacePoints, Vector3>();
// returns the face point coordinates or Vector3.zero if not found
public Vector3 GetPoint(HighDetailFacePoints pointType) {
if (dictFacePoints != null && dictFacePoints.ContainsKey(pointType)) {
return dictFacePoints[pointType];
}
return Vector3.zero;
}
void Update() {
if (!manager) {
manager = KinectManager.Instance;
}
if (!faceManager) {
faceManager = FacetrackingManager.Instance;
}
// get the face points
if (manager != null && manager.IsInitialized() && faceManager && faceManager.IsFaceTrackingInitialized()) {
long userId = manager.GetUserIdByIndex(playerIndex);
if (faceVertices == null) {
int iVertCount = faceManager.GetUserFaceVertexCount(userId);
if (iVertCount > 0) {
faceVertices = new Vector3[iVertCount];
}
}
if (faceVertices != null) {
if (faceManager.GetUserFaceVertices(userId, ref faceVertices)) {
Matrix4x4 kinectToWorld = manager.GetKinectToWorldMatrix();
HighDetailFacePoints[] facePoints = (HighDetailFacePoints[])System.Enum.GetValues(typeof(HighDetailFacePoints));
for (int i = 0; i < facePoints.Length; i++) {
HighDetailFacePoints point = facePoints[i];
dictFacePoints[point] = kinectToWorld.MultiplyPoint3x4(faceVertices[(int)point]);
}
}
}
}
}
}
コメントを残す