为了方便在Cocos2dx中使用,我封装了RealSense SDK的手部追踪的部分。源码可以在这里下载 (密码:6q3p)。
最初之所以用Cocos2dx是因为当时在GitHub上已经有人封装了RealSense SDK到引擎中。但是后来测试发现并不能用。所以为了偷懒就直接自己简单封装了一个。
SDK的开发环境配置
实感摄像头需要在Win8.1及以上系统上使用,使用前需要安装配套的驱动程序,此外开发者还需要安装配套的实感SDK开发套件,它包含了开发所需要使用的头文件库文件,此外还包含了几个简单的例子,方便开发者学习使用。这些组件的安装包都可以从英特尔官方网站免费下载,直接安装即可。
系统总体架构
第二部分是事件监听组件,在游戏中一般不直接和摄像控制中心打交道,而是通过事件监听组件来获取摄像头的事件,例如手的移动事件,手势事件等,这部分的主要功能是方便开发者在游戏中处理输入事件,是摄像头控制中心与游戏之间沟通的桥梁。实际上这部分是cocos2dx引擎与封装的SDK的中间部分。
第三部分是游戏的逻辑部分,通过事件监听组件获取设备输入,然后驱动游戏中的角色的行为,同时还包括了界面UI的交互,游戏流程的控制等。不详述。
实感摄像头控制中心的设计和实现
摄像头由RealSenseCam类控制。RealSenseCam是一个单例类,在整个游戏进程中,它只被初始化一次,在游戏结束时再被释放。
它的主要工作流程如下:
初始化
除了一些参数的初始化外,还需要使用实感提供的函数来初始化摄像头。前面已经大致描述过了实感SDK的构架与类层次,所以首先要创建一个PXCSession,然后在创建好的PXCSession中创建PXCSenseManager,再开启手部追踪即可。代码如下:
void RealSenseCam::initCam(){
m_iInitProgress = 0;
m_bInitFailed = false;
Definitions::appName = "RealsenseTest";
initInfomation = "Creating Session";
m_session = PXCSession::CreateInstance();
if (!m_session)
{
initInfomation = "Failed Creating PXCSession\n";
m_bInitFailed = true;
return;
}
m_iInitProgress++;//1
m_senseManager = m_session->CreateSenseManager();
initInfomation = "Creating SenseManager";
if (!m_senseManager)
{
initInfomation = "Failed Creating PXCSenseManager\n";
m_bInitFailed = true;
return;
}
m_iInitProgress++;//2
initInfomation = "Enabling Hand Module";
if (m_senseManager->EnableHand(0) != PXC_STATUS_NO_ERROR)
{
initInfomation = "Failed Enabling Hand Module\n";
m_bInitFailed = true;
return;
}
m_iInitProgress++;//3
initInfomation = "Creating HandModule";
m_handModule = m_senseManager->QueryHand();
if (!m_handModule)
{
initInfomation = "Failed Creating PXCHandModule\n";
m_bInitFailed = true;
return;
}
m_iInitProgress++;//4
m_handDataOutput = m_handModule->CreateOutput();
initInfomation = "Creating HandData";
if (!m_handDataOutput)
{
initInfomation = &