最近,完成了基于机器学习的Kinect姿势识别的功能。但是,光做一做相应的姿势,收集到识别的数据,总感觉差强人意,少了点什么东西。而且有时候会因为距离kinect的距离远近发生误判的情况,Scene界面什么也没有,只好凭感觉来调整位置。还有就是,面对每秒上百条数据结果,还真是看不过来。于是,我就萌生了一个想法,能不能把收集到的数据展示成为一个类似于实时监控波形图,这样的话,我就能够在Unity上更方便的处理姿势检测的数据啦。
好啦,我们先看一下效果图~
嗯,接下来,我们来讲解一下具体的制作过程。
首先是,这个波形图的建立,我们这里使用动态纹理的方式生成。
创建一个新的脚本,我这里命名为HistogramTexture。
哦,对了,在编写本脚本之前,请先在您的项目中增加LMNRY/SetProperty(https://github.com/LMNRY/SetProperty/tree/master/Scripts)这个插件,他可以帮助我们可以在编辑模式下调试的时候,随意概念脚本的属性并显示。
下面是主要程序纹理的代码。
我们可以在类名前面加一个标志[ExecuteInEditMode],这表明我们的代码是可以在编辑模式下使用的。编辑模式下的update函数不会一直调用的,而是当scene界面发生变化的时候才会执行。
切记,在本例中,这个模式我们可以当做最初画程序纹理调试用,当真正运行程序的时候,要把[ExecuteInEditMode]注释掉。
public Material material = null;
public bool iscanvas = false;
private Texture2D m_generatedTexture = null;
private int base_width;
private Queue heights = new Queue();
private float height = 0f;
#region Material properties
[SerializeField,SetProperty("textureWidth")]
private int m_textureWidth = 100;
public int textureWidth{
get{
return m_textureWidth;
}
set{
m_textureWidth = value;
_UpdateMaterial ();
}
}
[SerializeField,SetProperty("rectangleColor")]
private Color m_rectangaleColor = Color.yellow;
public Color rectangleColor{
get{
return m_rectang