FittingRoomMirror
卡耐基梅隆大学 虚拟试衣Dome
Install / Use
/learn @TastSong/FittingRoomMirrorREADME
FittingRoomMirror
环境配置
- unity2017.1.1安装
- 安装Kinect2驱动
- VS2013(用其他版本应该没有问题,个人比较喜欢2013而已)
主要代码分析
private void LoadModel(string modelDir)
{
string modelPath = "Clothing/" + modelDir + "/model";
UnityEngine.Object modelPrefab = Resources.Load(modelPath, typeof(GameObject));
if(modelPrefab == null)
return;
if(selModel != null)
{
GameObject.Destroy(selModel);
}
selModel = (GameObject)GameObject.Instantiate(modelPrefab);
selModel.name = "Model" + modelDir;
selModel.transform.position = Vector3.zero;
selModel.transform.rotation = Quaternion.Euler(0, 180f, 0);
AvatarController ac = selModel.AddComponent<AvatarController>();
ac.posRelativeToCamera = modelRelativeToCamera;
ac.posRelOverlayColor = (foregroundCamera != null);
ac.mirroredMovement = true;
ac.verticalMovement = true;
ac.smoothFactor = 0f;
KinectManager km = KinectManager.Instance;
ac.Awake();
if(km.IsUserDetected())
{
ac.SuccessfulCalibration(km.GetPrimaryUserID());
}
km.avatarControllers.Clear(); // = new List<AvatarController>();
km.avatarControllers.Add(ac);
AvatarScaler scaler = selModel.AddComponent<AvatarScaler>();
scaler.mirroredAvatar = true;
scaler.bodyScaleFactor = bodyScaleFactor;
scaler.continuousScaling = continuousScaling;
scaler.foregroundCamera = foregroundCamera;
scaler.Start();
}
- 完成模型的销毁
- 完成模型的加载
void MenuWindow(int windowID)
{
menuWindowRectangle = new Rect(Screen.width - 160, 40, 150, Screen.height - 60);
if (modelThumbs != null)
{
GUI.skin.button.fixedWidth = 120;
GUI.skin.button.fixedHeight = 163;
scroll = GUILayout.BeginScrollView(scroll);
selected = GUILayout.SelectionGrid(selected, modelThumbs, 1);
if (selected >= 0 && selected < modelNames.Length && prevSelected != selected)
{
prevSelected = selected;
LoadModel(modelNames[selected]);
}
GUILayout.EndScrollView();
GUI.skin.button.fixedWidth = 0;
GUI.skin.button.fixedHeight = 0;
}
}
- 试衣镜逻辑判断
public void UserDetected(long userId, int userIndex)
public void GestureInProgress(long userId, int userIndex, KinectGestures.Gestures gesture,
float progress, KinectInterop.JointType joint, Vector3 screenPos)
public bool GestureCompleted(long userId, int userIndex, KinectGestures.Gestures gesture,
KinectInterop.JointType joint, Vector3 screenPos)
- 实现手势监听
void Update()
{
if (!gestureListener)
return;
if (gestureListener.IsSwipeLeft())
{
selected++;
selected = (selected % numberOfModels);
Debug.Log("SwipeLeft.");
}
else if (gestureListener.IsSwipeRight())
{
selected--;
selected = (selected % numberOfModels);
Debug.Log("SwipeRight.");
}
}
- 左右挥手换衣逻辑
Related Skills
node-connect
349.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
