00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #pragma once
00024
00025 #include <OgreKinectPrerequisites.h>
00026 #include <OgreVector3.h>
00027 #include <OgreTexture.h>
00028 #include <Kinect-win32.h>
00029
00030 namespace Kinect
00031 {
00032 class KinectFinder;
00033 class Kinect;
00034 }
00035
00036 namespace Ogre
00037 {
00038 namespace Kinect
00039 {
00040 enum LedMode
00041 {
00042 Led_Off = 0x0,
00043 Led_Green = 0x1,
00044 Led_Red = 0x2,
00045 Led_Yellow = 0x3,
00046 Led_BlinkingYellow = 0x4,
00047 Led_BlinkingGreen = 0x5,
00048 Led_AlternateRedYellow = 0x6,
00049 Led_AlternateRedGreen = 0x7
00050 };
00051
00052 static const unsigned int colorWidth = ::Kinect::KINECT_COLOR_WIDTH;
00053 static const unsigned int colorHeight = ::Kinect::KINECT_COLOR_HEIGHT;
00054 static const unsigned int depthWidth = ::Kinect::KINECT_DEPTH_WIDTH;
00055 static const unsigned int depthHeight = ::Kinect::KINECT_DEPTH_HEIGHT;
00056 static const unsigned int nbMicrophone = ::Kinect::KINECT_MICROPHONE_COUNT;
00057 static const unsigned int audioBufferlength = ::Kinect::KINECT_AUDIO_BUFFER_LENGTH;
00058
00059 class Device;
00060 class _OgreKinectExport DeviceManager
00061 {
00062 public:
00063 DeviceManager();
00064 virtual ~DeviceManager();
00065
00066 unsigned int getKinectCount();
00067 Device* getKinect(unsigned int index = 0);
00068
00069 protected:
00070 ::Kinect::KinectFinder* mFinder;
00071 };
00072
00073 class DeviceListener;
00074 class _OgreKinectExport Device
00075 {
00076 friend class DeviceListener;
00077
00078 public:
00079 Device(::Kinect::Kinect* kinect);
00080 virtual ~Device();
00081
00082 void createTexture(const std::string& colorTextureName, const std::string& depthTextureName);
00083 void createColoredDepthTexture(const std::string& coloredDepthTextureName);
00084
00085 bool isConnected();
00086 bool update();
00087
00088 void setMotorPosition(double value);
00089 void setLedMode(LedMode mode);
00090 bool getAccelerometerData(Ogre::Vector3& value);
00091
00092 protected:
00093 void convertDepthToRGB();
00094
00095 ::Kinect::Kinect* mKinect;
00096 DeviceListener* mKinectListener;
00097
00098 unsigned short mGammaMap[2048];
00099
00100 Ogre::TexturePtr mColorTexture;
00101 Ogre::PixelBox mColorPixelBox;
00102 bool mColorTextureAvailable;
00103
00104 Ogre::TexturePtr mDepthTexture;
00105 Ogre::PixelBox mDepthPixelBox;
00106 bool mDepthTextureAvailable;
00107
00108 Ogre::TexturePtr mColoredDepthTexture;
00109 Ogre::PixelBox mColoredDepthPixelBox;
00110 unsigned char* mColoredDepthBuffer;
00111 };
00112
00113 class DeviceListener : public ::Kinect::KinectListener
00114 {
00115 public:
00116 DeviceListener(Device* device);
00117
00118 virtual void KinectDisconnected(::Kinect::Kinect* kinect);
00119 virtual void ColorReceived(::Kinect::Kinect* kinect);
00120 virtual void DepthReceived(::Kinect::Kinect* kinect);
00121
00122 protected:
00123 Device* mDevice;
00124 };
00125 }
00126 }