加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 16:40:18 所属栏目:百科 来源:网络整理
导读:标题:使用 IntelRealScene 设备结合 Cocos 引擎实现体感游戏开发 内容: Cocos游戏开发引擎对于广大开发者来说都比较熟悉, IntelRealScene 是什么呢,简单理解是一种特殊的摄像头,可以捕捉用户的手势,面部表情等,进而实现 AR,VR 的特殊应用,本案例通过

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

内容:

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

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.1Win7以上64位操作系统

4.2使用了IntelF200摄像头设备

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

4.4安装vs2013

5.开发核心步骤

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

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

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

选择C:ProgramFiles(x86)IntelRSSDKprops

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

如下图:

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

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

在库目录增加一行只想RSSDKsamplecommonlibx64v140

然后编译项目,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::threadt([&](){

printf("initrealsencen");

PXCSession*session=PXCSession_Create();

if(session)

{

PXCSession::ImplVersionversion=session->QueryVersion();

CCLOG("SDKVersionis%d.%dn",version.major,version.minor);

session->Release();

}

///////////////初始化rs模块

PXCSenseManager*senseManager=PXCSenseManager::CreateInstance();

if(senseManager)

CCLOG("intelPXCSenseManagerok");

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

CCLOG("intelrealsenceEnableFace");

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

CCLOG("intelsenseManager->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();

boolquit=false;

while(!quit)

////获取跟踪的坐标

faceData->Update();

intfaceNum=faceData->QueryNumberOfDetectedFaces();

if(faceNum>0)

PXCFaceData::Face*trackedFace=

faceData->QueryFaceByIndex(0);

PXCFaceData::DetectionData*detectionData=

trackedFace->QueryDetection();

PXCRectI32rectangle;

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("intelrealsenceerror2");

senseManager->Release();

CCLOG("intelrealsenceerror1");

});

t.detach();

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

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

voidGame::update(floatt)

{

//每帧保存一个点

if(allPoint.size()<60)

MyPoint*newp=newMyPoint(x,h);

newp->autorelease();

allPoint.pushBack(newp);

}

else

allPoint.eraSEObject(allPoint.front());

intfarx=(allPoint.back()->x-allPoint.front()->x);

std::stringstr=

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

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

if(farx>30&&farx<200)

if(this->_dir==Stop)

this->_dir=Up;

allPoint.clear();

。。。。。。

}

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读