有人知道kinect2.0开发教程可以在U3D里使用吗

关于kinect采集的彩色图像如何显示在unity3D中,以及镜像显示的问题
查了一些资料,据我所知,有两种方法:一种是显示在某个物体的renderer.material.mainTexture上;另一种是显示在GUI.DrawTexture上。其实原理是一样的,只不过显示在某个物体上,你可以很容易的移动这个物体。
之前查了些资料,主要是参照了这个大牛的工程。
http://wiki.etc.cmu.edu/unity3d/index.php/Microsoft_Kinect_-_Microsoft_SDK
运行场景,会发现有两个plane,一个显示彩色图像,一个显示深度图像。插一句,对于菜鸟来说,看大牛的代码,再把自己想要的那部分提取出来,真的不容易。可能是我能力不够,我前前后后折腾了将近三天,才把显示彩色图像的代码摘取出来。虽然能把图像显示在GUITexture上,但是没办法实现镜像的效果。后来到处找资料,才终于把这个小小的功能实现。期间虽然辛苦,但是现在感觉很满足。再插一句,google真的比百度好用的多,而且国外的论坛里的东西都很有用。
先从哪里开始呢,先说怎么把kinect采集的彩色图像信息传入unity中吧。我这里说的,都是基于上面那个大牛的工程,所以想看懂下面的,你先要下载并且运行大牛的工程。
好了,开始了。
找到ColorImagePlane你能看到他上面的脚本DisplayColor.cs就是这个脚本控制在这块平板上显示图像。打开它,稍稍研究一下它。好了,vs哼唧哼唧打开了。
先找start()。你看到定义了一个tex,然后把这个tex赋值给了这个平板的
renderer.material.mainTexture。至于最一开始声明的
private Kinect.KinectInterface
还有kinect =
devOrEmu.getKinect();我理解的不是很透彻,但是我是这么看的。先看Kinect.KinectInterface中的Kinect,F12,无法导航到定义,那就F12
KinectInterface。跳到KinectInterop.cs了,也就是说,如果你要提取显示图像的代码,就要带上这个脚本。KinectInterop.cs中定义了接口public
KinectInterface。这个接口中有一些没有函数体的函数。其他类如果想要实现这个接口,就要在类中完成接口中函数的定义。这样看来DisplayColor.cs中定义的小写kinect要实现接口中的方法。而这个DeviceOrEmulator我没搞懂是干什么的。反正devOrEmu.getKinect();这个方法返回了一个KinectSensor类型的device,而KinectSensor类实现了接口KinectInterface。这样再把device赋值给kinect。也不知道我说没说清楚,不过大家如果细心看看的话,应该能理清这个思路。
接下来update()。这就看到了kinect有pollColor()这个方法。其中最重要的一句tex.SetPixels32()。这个方法是从底到顶复制数据。所以导致了plane上的图像是上下颠倒的,虽然运行之后你发现没有颠倒,可能是大牛把plane旋转了一下。如果想显示在GUI.Drawtexture上就要正过来了。我想了好久才想明白。我是这么做的,图片下半部分被注释掉的也是一种方法,不过好像比较笨,当然方法很多,有基础的人应该觉得是小菜一碟。
好了已经正过来了。那怎么显示在gui上呢,这个简单图片中的函数已经把dst[]返回给了tex,你在GUI.DrawTexture中把tex画在屏幕上就行了。
正过来以后,你会发现,当你举起左手的时候,画面右边的手举起来了。如果你想要一个镜像的效果的话,这样可不行。查了一些资料。方法有:
GUI.DrawTextureWithTexCoords,
这个 GUI.DrawTexture(new
Rect(Screen.width, 0, -Screen.width, Screen.height), tex);
GUIUtility.RotateAroundPivot。
还有这个GUIUtility.ScaleAroundPivot(scale,
p);这些我都亲测了,只有最后一个能达到取镜像的效果。之前的三个对于静态的Texture2D也没问题,但是到了这种动态的不断刷新的tex这里,就只有最后一个好使了。每种方法如何使用,请自行谷歌。如果最后一个不好使的话,我就不会兴冲冲的来写这篇博文了,希望能对大家有帮助。如果三天之前,我一下子就搜到这样的文章,可能半天的时间,我就搞定这些了。在这里,衷心的推荐用chrome浏览器搜索你想要的信息。
最后,本来打算把之前做过的完整的demo发上来,但是实在太忙了,等以后有时间我会慢慢整理的。上面说的乱糟糟,不知道说清楚没有。大家转载的时候注明出处吧,虽然也没什么技术含量,但也用了好多时间在里面。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Introducing the new Surface family. Powerful devices designed around you.PreviousNextPlay
Registration Suggested
Registration takes only a few moments and allows Microsoft to provide you with the latest resources relevant to your interests, including service packs, security notices, and training.Please click the Continue button.
Registration is suggested for this download:
Registration Suggested for This DownloadRegistration takes only a few moments and allows Microsoft to provide you with the latest resources relevant to your interests.Register and receive the download:Yes, I want to register and receive the download.No, I do not want to register.Take me to the download.
The Kinect for Windows Software Development Kit (SDK) 2.0 enables developers to create applications that support gesture and voice recognition, using Kinect sensor technology on computers running Windows 8, Windows 8.1, and Windows Embedded Standard 8.
2.0.KinectSDK-v2.0_1409-Setup.exe10/21/2014275.8 MB
What's new?
This release introduces support for the Kinect for Windows v2 sensor, and introduces a broad range of capabilities for developers.
Learn more about the Kinect for Windows SDK 2.0
The Kinect for Windows SDK 2.0 includes the following:
Drivers for using Kinect v2 sensors on a computer running Windows 8 (x64), Windows 8.1 (x64), and Windows Embedded Standard 8 (x64)
Application programming interfaces (APIs) and device interfaces
Code samples
Supported Operating System
Embedded 8 Standard, Windows 8, Windows 8.1
Recommended Hardware Configuration
64-bit (x64) processor
4 GB Memory (or more)
Physical dual-core 3.1 GHz (2 logical cores per physical) or faster processor
USB 3.0 controller dedicated to the Kinect for Windows v2 sensor*
DX11 capable graphics adapter**
A Microsoft Kinect v2 sensor, which includes a power hub and USB cabling
* If you're adding USB 3.0 functionality to your exisiting PC through a USB 3.0 host controller adapter, please ensure that it is a Windows 8 compliant device and that it supports Gen-2. See the
for additional information regarding USB 3.0 compatibility.
** For the current list of good known adapters click
Software Requirements
Visual Studio 2012 or Visual Studio 2013
To install the Kinect for Windows SDK 2.0:
Make sure the Kinect sensor is not plugged into any of the USB ports on the computer.
From the download location, double-click on KinectSDK-v2.0_1409-Setup.exe
Once the Kinect for Windows SDK has completed installing successfully, ensure the Kinect sensor is connected to the power hub and the power hub is plugged into an outlet. Plug the USB cable from the power hub into a USB 3.0 port on your computer. Driver installation will begin automatically.
Wait for driver installation to complete. You can verify that installation has completed by launching Device Manager and verifying that "KinectSensor Device" exists in the device list. Note:On first plugin, the firmware on the device will be updated. This may result in the device enumeration happening several times in the first minute.
Installation is now complete.
Follow Microsoft
Microsoft Store
Company Site feedbackWhat category would you like to give web site feedback on?Choose a categorySite Navigation (finding what you want)Site ContentLanguage QualitySite DesignOtherRate your level of satisfaction with this web page today:Very SatisfiedSomewhat SatisfiedSomewhat DissatisfiedVery DissatisfiedComments:Submit9996人阅读
专业实习终于结束了,一个月的实习也没做个什么东西出来,主要是太懒,感觉做过几个网站之后再做网站没意思了()。 &最近没事,正好捡起Kinect再研究下,话说最近一次研究Kinect也是去年了,那个时候总是看人家的,自己也很少去做也很少去写,其实程序这东西真的要自己动手,光看没用,会说也不行,真正动起手来才知道个中真理。
今年寒假用了下MS的Kinect SDK(不过都是基于WPF的),MS的东西果然很简单。最近由于项目需要要重新研究下在Unity3D里面使用Kinect,原来一直用的是OpenNI的NITE的封装包,直接拿过来用,很简单。但是寒假看了MS的SDK后就一直想在Unity3D里面也可以调用MS的SDK。于是自己就非常想写一个自己的Unity3D和Kinect结合的类库或者插件。所以最近几天自己一直在忙着百度、google,想看看有没有可以参考的资料。不过搜遍各大网站,发现关于Kinect开发的资料是越来越多,但是关于Unity3D和Kinect结合的资料一直很少。能搜到的资料不多,翻来覆去都是那么几篇,虽然是有一定启发,但是还是不够。不过倒是发现OpenNI2发布了,OpenNI2在架构上比OpenNI有了很大差别,可以说是焕然一新。
根据网上找的资料,总结下自己最近的“收获”:
1.Kinect目前可以使用的SDK有以下3个:
(1)MS的SDK,目前更新到了V1.7,在官网上有历史版本可以下载。
MS的SDK从beta算起有7 &8个了,而且MS的SDK各个版本都有不同程度的更新和变化,可以使用C++也可以使用C#,不过自己半路出家,只是在最初的beta1和现在V1.6的,其他的没用过,而且全是用C#开发的WPF程序。要想使用MS的SDK一定要注意自己目前安装的是哪个版本的SDK。(不会C++是一种悲剧啊= =)
(2)OpenNI的SDK,这里指的是老的OpenNI,安装起来超级麻烦,而且要安装特定的驱动,不能用微软的驱动,最主要的是老版本的OpenNI在它之上NITE一统天下。关于这个版本的SDK,自己也就是在使用它的Unity Kinect Wrapper的时候接触过,但是了解不深,而且它提供的是C++接口,看来自己与它无缘了。
(3)OpenNI2的SDK,这是最新的OpenNI的SDK,在它之后多出了很多中间件,你可以使用NITE2也可用别的。去它官网转了一圈(http://www.openni.org)发现它没有提供C#的接口,还是得用C++开发。试着搜索了下Unity3D这类关键词,想看看它在1.x的时候的封装包有没有跟着更新。结果半喜半忧,它是提供了一个可以跟Unity3D结合的插件,但是却是ZigFu的,貌似1.x的那个Unity3D
Kinect Wrapper封包已经没了。
2.可以跟Unity3D结合的插件:
其实关于在Unity3D中使用Kinect的方法网上介绍的无外乎还是那几个(貌似去年就是这几个),而且随着OpenNI2的发布,去年曾经吵的“火热”的那个OpenNI的Kinect Wrapper也很少提了。而且想要在Unity3D中使用MS的SDK要分版本,V1.5、V1.6、V1.7的SDK好像都互相不兼容。借用网上大牛写的总结(http://blog.csdn.net/yuanchunfa/article/details/8107628)。在Unity3D中使用Kinect也就是5种方案。
(1)Zigfu:这个是OpenNI官网可以找到的。挺好用的,不过很遗憾要收费,而且网上找不到破解的dll。
(2)CUM(卡耐基梅陇大学)的Kinect Wrapper。这个wrapper是基于MS beta版本的SDK。想要在V1.5和V1.6里面使用要替换文件,我直接找的人家改好的V1.6的Wrapper,不知道适不适用于V1.5的。
(3)adevine1618的开发包,网上说不在更新了,在github上找到了这个封包,本来想下载下它的dll源码来看看作为参考的,结果不知道是github的原因还是天朝的原因,一直下载不下来。不过现在想想他很可能是基于C++来写的插件,所以自己也就欣慰了,下载下来的话自己半吊子的C++知识也不会有太大收获。
(4)仿照Zigfu自己写一套C#类库,不过那篇文章也说了,Unity现在只支持到.net 3.5而Kinect V1.6最少要.net 4.0。我也试着写了一个C#的DLL,里面封装了Kinect的启动,停止什么的方法。不过在Unity3d里面真的提示错误,看错误也就知道是因为使用了高版本的.net资源的原因。
(5)用C++自己写一套插件,那篇文章说了,这个可以实现,不过本人没用C++做过Kinect的开发,而且自己的C++水平写出来肯定会成篇的bug,也就放弃了。
看完上面的5种方法,想了一下其实自己现在能用的解决方案也就三种,并且都实验了下:
(1)使用Zigfu,个人认为Zigfu的API做的不怎么样(也可能是没付费的原因,难道想学JBoss?),用的不顺手,而且到时候如果需要的话只能付费获商业许可。那个水印也够烦人,目前Zigfu的插件是针对Unity3d 4.0的,在3.5下面能用,但是有莫名其妙的错误(自己试试就知道了)虽不影响开发,但是很烦人。最主要的是Zigfu的dll没有找到破解版,收费还不便宜(对于穷学生来说那是天价了)。
(2)CUM的wrapper,自己花了两天时间着重看了下CUM的那个封包的源码,发现收获不小。不过在使用那个封包的时候一直报数组越界的错误,虽然知道是哪儿的问题,但是自己根本解决不了。不过对写自己的C#类库倒是有不小的帮助。
(3)使用去年的OpenNI的那个基于NITE的Unity3D wrapper。这个肯定行,但是在这个与时俱进的年代,谁都想用新的,OpenNI2都发布了,自己也不想用OpenNI了,而且OpenNI 1.x的安装还那么麻烦。所以这个方案不到万不得已不会使用。
接下来准备反编译Zigfu的dll文件,看看能不能成功,如果能成功,那么就仿照它的思路写一套自己的C#类库,就起名叫UDK,如果能写出来自己会放到网上将他开源的,到时候希望能有大牛指点,同时希望能有更多的开源代码放出来大家共同学习进步。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:62387次
积分:1027
积分:1027
排名:千里之外
原创:40篇
评论:31条
(1)(1)(2)(1)(3)(4)(7)(8)(2)(1)(1)(2)(2)(4)(1)

我要回帖

更多关于 kinect1.0与2.0区别 的文章

 

随机推荐