使用IntelRealScene设备结合Cocos引擎实现体感游戏开发_cocos 体感操控-程序员宅基地

技术标签: cocos2d-x  realscene  跑酷游戏  实感开发  intel  

标题:使用IntelRealScene设备结合Cocos引擎实现体感游戏开发

内容:

Cocos游戏开发引擎对于广大开发者来说都比较熟悉,Intel RealScene是什么呢,简单理解是一种特殊的摄像头,可以捕捉用户的手势,面部表情等,进而实现AR,VR的特殊应用,本案例通过摄像头结合Cocos引擎实现一款跑酷游戏,游戏截图如下:

07游戏主界面.png 

1-cocos+IntelRealScene实现的跑酷游戏

1.游戏玩法:

   1.在摄像头前坐好

   2.当游戏主角前方有障碍物或陷阱时候迅速移动头部向左,游戏主角会跳起

   3.恢复坐好状态

   (目前我的最好成绩是24秒!!!)

2.项目运行工程网盘地址:

   链接: http://pan.baidu.com/s/1ntB0kwL 密码: nzrd

3.项目源码网盘地址:

  链接: http://pan.baidu.com/s/1qWj9Iws 密码: buj6   

4.开发和运行环境要求:

         4.1 Win7以上64位操作系统

         4.2 使用了Intel F200摄像头设备

         4.3 正确安装F200驱动程序(下载在)

         4.4 安装vs2013

5.开发核心步骤

   5.1 登录www.cocos.com下载最新版的cocos引擎源码,然后安装,并创建一个新的Cocos工程(此处略过10000字,详细方法可以登录cvp.cocos.com),并使用vs打开。

   1创建cocos项目.png

   5.2. 重要,若要cocos支持RealScene设备需要加载库,可以通过属性表一次性完成该操作,在VS中找到【视图】【其他窗口】【属性管理器】,如下图:

02配置属性.png 

然后找到添加属性按钮,如下图:

03添加现有属性.png 

选择C:\Program Files (x86)\Intel\RSSDK\props

选择任意VS2010-13.Integration.MD.props 或者 VS2010-13.Integration.MT.props

如下图:

04选择属性配置文件.png 

在项目名上面右键,查看项目属性,检查是否加载成功,如下图:

05检查属性是否配置成功.png 

我们看到包含目录和库目录中已经有了关于RSSDK的内容,说明属性文件生效,但是这时候编译工程会出现找不到lib库的错误,解决方法如下:

在库目录增加一行只想RSSDK\sample\common\lib\x64\v140

06解决编译错误.png 

然后编译项目,ok

6.核心编码

     6.1 在AppDelegate中启动摄像头并在独立线程中更新数据。

#include "CCStdC.h"

#include <SDKDDKVer.h>

#include <pxcsession.h>

#include <stdio.h>

#include <stdlib.h>

#include <pxcsensemanager.h>

#include <util_render.h>

#include <pxcfaceconfiguration.h>

引入以上库文件,在构造函数启动线程

AppDelegate::AppDelegate() {

std::thread t([&](){

printf("init realsence\n");

 

PXCSession* session = PXCSession_Create();

if (session)

{

PXCSession::ImplVersion version = session->QueryVersion();

CCLOG("SDK Version is %d.%d\n", version.major, version.minor);

session->Release();

}

 ///初始化rs模块

PXCSenseManager* senseManager = PXCSenseManager::CreateInstance();

 

if (senseManager)

{

CCLOG("intel PXCSenseManager ok");

 

senseManager->EnableFace();//开启脸部识别模块 

CCLOG("intel realsence EnableFace");

if (senseManager->Init() == PXC_STATUS_NO_ERROR)

{

CCLOG("intel senseManager->Init() ok");

 

// 获取faceModule

PXCFaceModule* faceModule = senseManager->QueryFace();

PXCFaceData* faceData = faceModule->CreateOutput();

PXCFaceConfiguration* faceConfiguration = 

faceModule->CreateActiveConfiguration();

设置3d跟踪模式

faceConfiguration->SetTrackingMode(

PXCFaceConfiguration::TrackingModeType::FACE_MODE_COLOR_PLUS_DEPTH);

faceConfiguration->detection.isEnabled = true;

faceConfiguration->ApplyChanges();

 

bool quit = false;

while (!quit)

{

// //获取跟踪的坐标

faceData->Update();

int faceNum = faceData->QueryNumberOfDetectedFaces();

if (faceNum > 0)

{

PXCFaceData::Face *trackedFace = 

faceData->QueryFaceByIndex(0);

PXCFaceData::DetectionData* detectionData = 

trackedFace->QueryDetection();

PXCRectI32 rectangle;

detectionData->QueryBoundingRect(&rectangle);

Game::x = rectangle.x;

Game::y = rectangle.y;

Game::w = rectangle.w;

Game::h = rectangle.h;

}

   senseManager->ReleaseFrame();

}

faceData->Release();

faceConfiguration->Release();

senseManager->Close();

}

else{

CCLOG("intel realsence error2");

}

senseManager->Release();

}

else{

CCLOG("intel realsence error1");

}

});

t.detach();

}

以上代码,会时时更新数据,捕获人脸的x,y,w,h在屏幕的坐标,缺省是640X360的范围,可以通过Log查看数据的变化。

     6.2 在GameScene中启动计划任务scheduleUpdate,并在每一帧处理。

void Game::update(float t)

{

//每帧保存一个点

if (allPoint.size() < 60)

{

MyPoint * newp = new MyPoint(x, y, w, h);

newp->autorelease();

allPoint.pushBack(newp);

}

else

{

MyPoint * newp = new MyPoint(x, y, w, h);

newp->autorelease();

 

allPoint.eraseObject(allPoint.front());

allPoint.pushBack(newp);

  int farx = (allPoint.back()->x - allPoint.front()->x);

std::string str = 

StringUtils::format("%d %d %d %d  %d", x, y, w, h, farx);

CCLOG("%s", str.c_str());

if (farx >30 && farx<200)

{

if (this->_dir == Stop)

{

this->_dir = Up;

 allPoint.clear();

}

 

}

}

  。。。。。。

}

这里用60个点来记录每一帧人脸坐标的变化,通过计算是否有超过40的移动来确定玩家是否跳起(这里很偷懒,可以使用的人脸的点可以达到78个点)

文章结束了,是不是还没看明白,下次再说。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sdhjob/article/details/49508987

智能推荐

ASP.NET MVC 模式-程序员宅基地

文章浏览阅读307次。ASP.NET MVC 是一个全新的Web应用框架ASP.NET 代表支撑应用框架的技术平台,表明ASP.NET MVC和传统的WebForm应用框架一样,都是建立在ASP.NET平台之上。MVC 表示该框架背后的设计思想,意味着ASP.NET MVC采用了MVC架构模式。MVC在20世纪70年代后期出现,产生于Xerox PARC施乐公司的帕洛阿尔托研究中心的Small..._aspnet mvvm

MacOS M1搭建Selenium环境_m1 mac selenium配置-程序员宅基地

文章浏览阅读350次。解压压缩包后,打开终端,进入当前chromedriver所在的路径,将chromedriver移动到默认路径(/usr/local/bin/)二、下载对应版本的浏览器驱动器:找到版本一致或最接近的版本的驱动器。若列表中含有selenium则表明安装成功。记得勾选上继承全局包,要不然会报错。_m1 mac selenium配置

UE4 OpenCV 插件 官方配置流程_ue4 opencv操作texture-程序员宅基地

文章浏览阅读4.6k次。谨以此片献给各种遇到坑的朋友。官网上的OpenCV 插件,根据github 上的描述 是针对UE4 4.16 版本以下的版本来提供的 OpenCV 采用的是3.0.0 , 也可以使用openCv 3.2.0环境描述:Ue4 4.15 OpenCV 3.2.0固有插件配置步骤:1, 创建一个C++ 的工程,打开后, 关闭即可。2,将OpenCV 的插件文件 解压缩之后, 将里面的文件..._ue4 opencv操作texture

使用Anaconda安装opencv-python-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏11次。直接在cmd命令行输入:conda install --channel https://conda.anaconda.org/menpo opencv3 接着根据提示按Y即可

nyoj-236-心急的C小加_nyoj 心急的c小加-程序员宅基地

文章浏览阅读646次。#include#includestruct mubang{int x;int y;}a[5005];int cmp(const void *a,const void *b){struct mubang *c=(struct mubang *)a;struct mubang *d=(struct mubang *)b;if(c->x!=d->x)re_nyoj 心急的c小加

JavaEE基础知识讲解-程序员宅基地

文章浏览阅读1.7k次。学习JavaEE的你们是不是一头雾水呢? C/S client/server 客户端/服务器 B/C browser/server 浏览器/服务器 通过浏览器访问到对应页面,发送请求(同步请求,异步请求,ajax请求,会读接口文档)---服务器(云服务器:腾讯云服务器 阿里云服务器等等)---应用服务器Tomcat---匹配servlet---service业务处理---dao层 JDBC Hibemate,ORM---数据库---File---servlet(控制器Controller)MVC_javaee基础知识

随便推点

深度学习简介-程序员宅基地

文章浏览阅读910次,点赞28次,收藏19次。交互性检索是在检索用户不能构建良好的检索式(关键词)的情况下,通过与检索平台交流互动并不断修改检索式,从而获得较准确检索结果的过程。新闻推荐需要:获取用户请求,召回候选新闻,对候选新闻进行排序,最终给用户推出新闻。将用户持续浏览新闻的推荐过程看成一个决策过程,通过强化学习学习每一次推荐的最佳策略,提高用户的点击率。无人驾驶被认为是强化学习短期内能技术落地的一个应用方向,很多公司投入大量资源在无人驾驶上,其中百度的无人巴士“阿波龙”已经在北京、武汉等地展开试运营,自动无人驾驶的行车视野如下图所示。

前端开发工程师简历_前端简历-程序员宅基地

文章浏览阅读3.5w次,点赞102次,收藏685次。简历是什么找工作之前投递的个人信息和工作能力----不全面应该是:个人当前阶段的价值体现前者:我能卖多少钱;后者:我现在值多少钱建议:每隔半年/一年给自己做总结的时候写一份简历(相当于个人价值总结)面试要刻意、精心准备公司内部晋升答辩,需要精心准备(ppt、演讲基本要精心准备一个月的时间)面试,简历,同样需要精心准备目录面试官如何分析一份简历简历模板和内容个人信息教育经历专业技能工作经历项目经历体现自己的亮点课程总结注意:不要造假学历造假:学信网可查工作经历造假:可_前端简历

CentOS 通过yum安装gcc 4.8, 4.9, 5.2等高版本GCC_有gcc高版本的yum库-程序员宅基地

文章浏览阅读2.6k次。https://www.dwhd.org/20160724_085212.html_有gcc高版本的yum库

SpringBoot自动配置原理分析_springboot 自动配置分析与整合测试-程序员宅基地

文章浏览阅读320次。1起步依赖原理分析 1.1分析spring-boot-starter-parent 按住Ctrl点击pom.xml中的spring-boot-starter-parent,跳转到了spring-boot-starter-parent的pom.xml,xml配置如下(只摘抄了部分重点配置):<parent> <groupId>org.sp..._springboot 自动配置分析与整合测试

python2.7 Crypto 使用pip的安装方式 【橘小白】_python2.7 使用pycrypto-程序员宅基地

文章浏览阅读9.1k次。最近想要使用Crypto.Cipher 的AES模块,可总是找不到Crypto.Cipher接下来介绍几个坑1.AES是在pyCrypto中而不是crypto中2.这个pyCrypto中间的C一定要大写,不然也不能用接下来介绍正确的安装姿势1.首先需要现在一款编译器Microsoft Visual C++ Compiler for Python 2.7下载地址https://www.m..._python2.7 使用pycrypto

整数划分问题(递归&非递归)_n的划分种数,其中划分大于等于2非递归算法-程序员宅基地

文章浏览阅读2.9k次,点赞4次,收藏7次。递归算法:将正整数n表示成一系列正整数之和,n=n1+n2+...+nk,其中n1>=n2>=n3>=...>=nk>=1,k>=1。正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数城外正整数n的划分数,记作p(n)。例如,正整数6有如下11种不同的划分,所以p(6)=11。6;5+1;4+2;4+1+1;3+3;3+2+1;3+1+1+1;2+2+2_n的划分种数,其中划分大于等于2非递归算法

推荐文章

热门文章

相关标签