[RealSense]3-ReaSense SDK的接入与封装

本文介绍了如何在Cocos2dx游戏引擎中封装Intel Realsense SDK,用于手部追踪。通过创建RealSenseCam单例类,实现了初始化、数据获取、手势识别等功能。支持握拳、手掌滑动、拇指弯向掌心三种手势,用于游戏操作。同时,文章讨论了数据处理中的消抖策略,确保手势识别的准确性。
摘要由CSDN通过智能技术生成

为了方便在Cocos2dx中使用,我封装了RealSense SDK的手部追踪的部分。源码可以在这里下载  (密码:6q3p)。

最初之所以用Cocos2dx是因为当时在GitHub上已经有人封装了RealSense SDK到引擎中。但是后来测试发现并不能用。所以为了偷懒就直接自己简单封装了一个。


SDK的开发环境配置

实感摄像头需要在Win8.1及以上系统上使用,使用前需要安装配套的驱动程序,此外开发者还需要安装配套的实感SDK开发套件,它包含了开发所需要使用的头文件库文件,此外还包含了几个简单的例子,方便开发者学习使用。这些组件的安装包都可以从英特尔官方网站免费下载,直接安装即可。

要在Cocos2d-x项目中使用实感的SDK十分的简单。只需要把实感SDK的相关头文件与所使用到的库文件包括进去就可以了。本课题中用到的两个lib都位于SDK的安装目录下,需要在项目中配置头文件目录,附加库目录以及库名,具体配置可以参考SDK附带的示例。


系统总体架构


游戏的基本构架如上,第一部分是实感摄像头的控制中心,主要是调用了实感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 = &
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值