有谁知道体感游戏手柄的原理,可以玩哪些类型的游戏?

有谁知道体感游戏手柄的原理,可以玩哪些类型的游戏?,第1张

你是否想过,当还未抛弃手柄和键鼠时,你享受的只是控制游戏的感觉;而当你放弃它们时,才是真正地融入游戏。现在,来一起看看未来我们将会怎样享受融入游戏的乐趣……

一个女孩极度夸张地手舞足蹈,在她面前的电视屏幕上,有一个有趣的玩偶,正做着同样的动作,努力地试图用身体的各个部分打飞正面袭来的红色球体—这是E3 2009微软发布会专场的一个画面。

任何一个参加了E3 2009盛会的朋友,心中对本届展会总留下一些难以挥去的感觉,兴奋、震撼、惊喜……微软带来的全新体感技术,给了我这些感觉。或许你能从YouTube上看到上面的那个画面,但我可以肯定,你很难理解亲眼看到和听到它时的感受,甚至于一些德国的游戏评论人士喊出这样的话:“它开启了未来游戏革新的大门。”

究竟新的体感技术与过去有何不同?它能为我们的游戏方式带来哪些不同的变化?这种新奇的人机交互技术还会延伸到哪些领域?

简单动作感应

体感技术,也可以称之为动作感应控制技术,通俗来讲是由机器通过某些特殊方式对用户的动作进行识别、解析,并按照预定方式,对相应动作在机器端做出反馈。是否觉得有些玄妙?在谈到新的体感技术之前,我们有必要简单回顾一下以前的一些动作感应控制技术。

可能除了Wii之外,你还常接触过这一类应用。比如iPhone知道当自己放平时,就应当将屏幕转变为横幅显示;摇一摇MP3,它会知道该播放下一首歌曲;再如PSP的《水银》游戏让你感觉手上真的端着一个平板,上面的水银会根据倾斜角度不同而来回滚动。这些都是简单动作感应最基本的应用。不过这些体感技术的应用对我们并未带来太大的触动,毕竟多数普通人很少会像极客一样去探根追底。

事实上在Wii问世之前的2003年,动作感应技术也曾在游戏行业初露锋芒。当年索尼公司推出的PS2配件EYETOY带给了玩家一种全新的游戏乐趣,这个摄像头会将电视前玩家的身体扫描并“放入”电视画面,玩家可以在电视画面中的卡通场景中,挥动双手来进行拳击、擦玻璃、放烟花等游戏。

EYETOY的原理其实并不复杂,摄像头以固定的速率采集图像,当场景内无变化时,前后两幅图像内容一致,当有物体运动时则产生差异,因此通过简单的对相邻两帧图像相减,得到画面中不同的部分,即可以感知是否有运动物体及运动物体的一些属性,比如大小,位置和颜色等。在这其中当然还有一些细节需要处理,流程虽简单,但是做好却不易。这一简单原理使得EYETOY仍存在一些瑕疵,例如当玩家动作过小,或是玩家所处的环境、服装色彩与身体过于接近时,EYETOY都可能出现短暂的无法识别问题。

三维体感技术的价值

EYETOY是第一个真正意义上实现大规模商用化的体感技术。但它最终却并未流行起来并得以普及,至少在其问世两年后,几乎再也听不到任何游戏厂商希望针对它来开发新游戏的声音。这是因为EYETOY有一个致命的软肋—它的原理注定了它只能摄取二维图像并加以解析,而在三维游戏世界中,多数游戏动作更偏向于三维。Wii之所以会比EYETOY成功,就是因为它解决了这个最令游戏厂商头痛的问题。

关于Wii的游戏方式对于行业带来的触动,相信已经不需要再多费唇舌,我们这里只从技术的优劣上来讨论Wiimote所采用的三维体感技术。

Wiimote使用了一块来自Analog Device的ADXL330 MEMS(微机电系统)三轴加速度传感芯片,它具备有功耗低、封装小以及极为强大的抗冲击能力,而其采用的BiCMOS制程技术,也兼具易量产与低成本的特性。这个传感芯片能够在X/Y/Z三个轴向上感知±3G的加速度,并且采用模拟的方式输出结果。这就意味着在三个轴向上运动速度越大,ADXL330输出的电压越强,反之输出的电压越小。同时,它还可以根据各种计算公式,很容易地得知倾斜角、重量、位置等信息。

因此,Wii可以将玩家对于Wiimote控制器的动作进行复制,并在游戏画面中的卡通人物身上进行再现。显然,在Wiimote的帮助下,体感技术能在更多的游戏中发挥其价值,比如网球、高尔夫、赛车、格斗和足球等,甚至是一些RPG类游戏。不过细心的你可能已经发现了另一个问题,那就是相比起EYETOY,Wiimote必须要借助一个外在的控制器,来感应玩家的动作。而且,它还缺乏一定的精准度,使得一些追求高精确 *** 作和真实性的游戏暂时只能放弃将其引入。

新体感技术的到来

为了改变Wiimote存在的缺陷,在E3 2009展会上,任天堂推出了自己的改进方案—Wii Motion Plus。Wii MotionPlus是通过Wii遥控器手柄底部的扩张端子进行连接,并通过与手柄内藏的加速度传感器以及传感器感应条进行联动,从而提高3D空间中的位置检测能力。

而索尼在E3上也公布了针对PS3设计的体感装置—针对EYETOY摄像头搭配专有感应芯片的控制器。因为其搭配了可变色LED灯和感应芯片,业界预测其精准度将是三大游戏主机厂商的体感技术中最高的,因为它还可以用来写字和画图。索尼也宣称,透过EYETOY的影像捕捉,该系统可以达到完全即时地将玩家身形与游戏画面进行合成,而玩家手上的控制棒在游戏中可表现为网球拍、球棒、刀剑、流星槌、鞭子等各种外观。或者你可以把它看作是“Wii+EYETOY”的结合(友情提醒:注意不要在索尼粉丝面前把这个看法说出来)。

此外,索尼还表示该体感装置可配备力反馈技术,并宣称“PS3开发套件现可实现面部及头部跟踪功能”。为实现这些功能,索尼已经开始为PS3的开发程序库添加新功能,包括AiLive动作识别中间件,以及索尼自行开发的面部识别库等。索尼电脑娱乐欧洲公司SCEE的开发服务主管Kish

Hirani向游戏开发商们保证,PS3连接PlayStation Eye摄像头将能够实现完整丰富的面部识别功能,包括“基于面部图像判断玩家性别和大概的年龄,识别多个器官如鼻、眼、耳,甚至还可以检测玩家是否微笑(类似索尼相机的微笑快门功能)。”

而这家公司日前又提出了一项新的PS3专用动作感应控制技术的专利申请,该项新技术与上面提到的装置完全不同。根据所公开的相关资料显示,这种全新的动作感应控制技术无需专用的手柄控制器,而是可以将现实生活中的任何物体拿来控制游戏,资料中展示了一款U形物体,而实际上诸如杯子、书本等物体也可以使用。

玩家只需手持物体在摄像头前转动,摄像头就会自动扫描并将物体的形状以及动作数据保存下来,从而把任何物体都能成为控制器。

不过,任天堂和索尼的这些技术在微软的方案面前,可没什么值得夸奖的,尽管我认为微软的构想暂时只是个美梦。

不同的道路

好吧,现在我们可以来谈谈本文最重要的主角—Project Natal。不同于任天堂和索尼,微软则走了更具有革新意义的另外一条路。微软为其体感系统取名“Project Natal”—一个整合有摄像头、感应器和软件系统的体感系统。

简单来看,Project Natal似乎和EYETOY颇为相似,但该系统可以完成对用户三维动作的识别。为了实现这一功用,它有一个配备了单色CMOS传感器的装置(有人称之为infrared camera),允许其在任何光照条件下识别房间内的三维空间,或是测量玩家动作的Z轴深度,而不是像EYETOY一样将图像作为一个简单的二维图形来识别。因此它可以判断整个房间内所有物体在三维空间上的运动,并且通过对人体48个关节点运动的测算,精确判定用户的动作。目前来看,该装置集成于

Project Natal摄像头中(比尔•盖茨在最近接受媒体采访时将之称为“景深传感摄像头”)。

实际上,比尔•盖茨早在2007年就提出了“Project Natal”的概念。当年在华尔街日报举办的“

All Things Digital”会议上,比尔•盖茨和史蒂夫•乔布斯同时登台时就表示:“想象一款游戏机,你可以直接拿起球棒或网球拍挥舞。”这时,主持人提醒他,Wii上已经应用了体感技术。而盖茨则明确区分了两者的不同:“不对,那不是一回事。你无法使用你自己的网球拍,你不能和朋友坐在一起,自然地做各种动作。那只是3D定位设备,而我现在说的是视频识别,是一款能看到你正在做什么的摄像头。”

微软对于Project Natal的定义很简单—一个让游戏玩家无需任何游戏控制器的游戏控制方式。Project Natal集成的传感器可以追逐到你身体的3D动作,对用户进行面部“辨识”,甚至还能听懂玩家的语音命令!

Project Natal的美梦

看到这里,你才仅仅了解这个计划的冰山一角,事实上Project Natal的最终目的甚至是改变人类使用电脑的方式。大导演史蒂文•斯皮尔伯格认为,人与机械最完美的沟通方式应当是“看不见”的。Project Natal正在做着这样的努力。Project Natal未来可能会带来哪些变化?

1.你将能够用语音随时控制你的Xbox,享受即时和你的朋友视频聊天等娱乐;

2.游戏体感 *** 作,你可以在F1赛车类游戏中,用手模拟方向盘,也可以模拟换轮胎的动作。甚至在一些特殊游戏中,你可以模仿喷火怪兽一样,张开大口吐出烈焰;

3.你可以与特定的游戏人物在程序中进行语音交谈,它甚至能对你的话语做出各种动作和表情回应;

4.开机面部识别登录,以及扫描下你的模样,并在虚拟世界中建立一个和你一模一样的虚拟体;

5.你可以从好友那里随意接收漂亮新衣,用来穿在Xbox中你的虚拟体身上,以观察这身衣服是否适合你;

6.你甚至可以把任何一个东西放在Project Natal摄像头前进行扫描,然后把它递给特定游戏/程序中的角色,这个东西可以是你心爱的滑板、特制的网球拍或是你自己信手涂鸦的一幅画。

写在最后

Project Natal在短时间内很难实现它的最终计划。即使是全身控制游戏的方案,也仍有一些问题需要克服,比如对于局部细微的感测仍有待加强。初步来看,无论是任天堂、索尼,还是微软,都无一例外地选择将体感技术作为未来游戏革新的突破方向。丢掉手柄,用全身来投入到游戏中,日益改善的体感技术带来的游戏方式,或许将彻底改变我们的游戏世界……

文库里找的,参考一下。

一、硬件电路接口图片

1.ADXL345硬件接口图片使用的是SPI端口进行通信,这样读取数据比较快且后续也可以转化为IIC通信接口。

在网上找一些发现IIC接口的比较多,所以本人就DIY做SPI的通信。

2.STM32F103T系列单片机作为MCU 资源比较丰富、本人比较熟悉开发速度较快

硬件电路首先是为了实现功能,所以设计比较简单。后续小编想做无线蓝牙的数据传输,所以硬件上也留了蓝牙串口通信的硬件接口和3.3V电源管理。

暂且将硬件这样设计,设计为双层PCB 这样减少了空间。电容、电阻为0805的易焊接。器件都选为贴片。

二、单片机驱动代码

1.ADXL345的端口配置函数

#define ADXL345_FLAG_TIMEOUT ((uint32_t)0x1000)

#define ADXL345_SPI SPI1

#define ADXL345_SPI_CLK RCC_APB2Periph_SPI1

#define ADXL345_SPI_SCK_PIN GPIO_Pin_5

#define ADXL345_SPI_SCK_GPIO_PORT GPIOA

#define ADXL345_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOA

#define ADXL345_SPI_SCK_SOURCEGPIO_PinSource5

#define ADXL345_SPI_SCK_AFGPIO_AF_5

#define ADXL345_SPI_MISO_PIN GPIO_Pin_6

#define ADXL345_SPI_MISO_GPIO_PORTGPIOA

#define ADXL345_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOA

#define ADXL345_SPI_MISO_SOURCE GPIO_PinSource6

#define ADXL345_SPI_MISO_AF GPIO_AF_5

#define ADXL345_SPI_MOSI_PIN GPIO_Pin_7

#define ADXL345_SPI_MOSI_GPIO_PORTGPIOA

#define ADXL345_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOA

#define ADXL345_SPI_MOSI_SOURCE GPIO_PinSource7

#define ADXL345_SPI_MOSI_AF GPIO_AF_5

#define ADXL345_SPI_CS_PINGPIO_Pin_2

#define ADXL345_SPI_CS_GPIO_PORT GPIOB

#define ADXL345_SPI_CS_GPIO_CLK RCC_APB2Periph_GPIOB

#define ADXL345_SPI_INT1_PIN GPIO_Pin_0

#define ADXL345_SPI_INT1_GPIO_PORTGPIOB

#define ADXL345_SPI_INT1_GPIO_CLK RCC_APB2Periph_GPIOB

#define ADXL345_SPI_INT1_EXTI_LINEEXTI_Line0

#define ADXL345_SPI_INT1_EXTI_PORT_SOURCE EXTI_PortSourceGPIOB

#define ADXL345_SPI_INT1_EXTI_PIN_SOURCE EXTI_PinSource0

#define ADXL345_SPI_INT1_EXTI_IRQnEXTI0_IRQn

#define ADXL345_SPI_INT2_PIN GPIO_Pin_1

#define ADXL345_SPI_INT2_GPIO_PORTGPIOB

#define ADXL345_SPI_INT2_GPIO_CLK RCC_APB2Periph_GPIOB

#define ADXL345_SPI_INT2_EXTI_LINEEXTI_Line1

#define ADXL345_SPI_INT2_EXTI_PORT_SOURCE EXTI_PortSourceGPIOB

#define ADXL345_SPI_INT2_EXTI_PIN_SOURCE EXTI_PinSource1

#define ADXL345_SPI_INT2_EXTI_IRQnEXTI1_IRQn

#define ADXL345_WHO_AM_I_ADDR 0x0F

#define ADXL345_CTRL_REG1_ADDR 0x20

#define ADXL345_CTRL_REG2_ADDR 0x21

#define ADXL345_CTRL_REG3_ADDR 0x22

#define ADXL345_CTRL_REG4_ADDR 0x23

#define ADXL345_CTRL_REG5_ADDR 0x24

#define ADXL345_REFERENCE_REG_ADDR 0x25

#define ADXL345_OUT_TEMP_ADDR 0x26

#define ADXL345_STATUS_REG_ADDR0x27

#define ADXL345_OUT_X_L_ADDR 0x28

#define ADXL345_OUT_X_H_ADDR 0x29

#define ADXL345_OUT_Y_L_ADDR 0x2A

#define ADXL345_OUT_Y_H_ADDR 0x2B

#define ADXL345_OUT_Z_L_ADDR 0x2C

#define ADXL345_OUT_Z_H_ADDR 0x2D

#define ADXL345_FIFO_CTRL_REG_ADDR 0x2E

#define ADXL345_FIFO_SRC_REG_ADDR 0x2F

#define ADXL345_INT1_CFG_ADDR 0x30

#define ADXL345_INT1_SRC_ADDR 0x31

#define ADXL345_INT1_TSH_XH_ADDR 0x32

#define ADXL345_INT1_TSH_XL_ADDR 0x33

#define ADXL345_INT1_TSH_YH_ADDR 0x34

#define ADXL345_INT1_TSH_YL_ADDR 0x35

#define ADXL345_INT1_TSH_ZH_ADDR 0x36

#define ADXL345_INT1_TSH_ZL_ADDR 0x37

#define ADXL345_INT1_DURATION_ADDR 0x38

#define I_AM_ADXL345 ((uint8_t)0xD4)

#define ADXL345_MODE_POWERDOWN ((uint8_t)0x00)

#define ADXL345_MODE_ACTIVE ((uint8_t)0x08)

#define ADXL345_OUTPUT_DATARATE_1((uint8_t)0x00)

#define ADXL345_OUTPUT_DATARATE_2((uint8_t)0x40)

#define ADXL345_OUTPUT_DATARATE_3((uint8_t)0x80)

#define ADXL345_OUTPUT_DATARATE_4((uint8_t)0xC0)

#define ADXL345_X_ENABLE((uint8_t)0x02)

#define ADXL345_Y_ENABLE((uint8_t)0x01)

#define ADXL345_Z_ENABLE((uint8_t)0x04)

#define ADXL345_AXES_ENABLE ((uint8_t)0x07)

#define ADXL345_AXES_DISABLE((uint8_t)0x00)

#define ADXL345_BANDWIDTH_1 ((uint8_t)0x00)

#define ADXL345_BANDWIDTH_2 ((uint8_t)0x10)

#define ADXL345_BANDWIDTH_3 ((uint8_t)0x20)

#define ADXL345_BANDWIDTH_4 ((uint8_t)0x30)

#define ADXL345_FULLSCALE_250 ((uint8_t)0x00)

#define ADXL345_FULLSCALE_500 ((uint8_t)0x10)

#define ADXL345_FULLSCALE_2000 ((uint8_t)0x20)

#define ADXL345_BlockDataUpdate_Continous ((uint8_t)0x00)

#define ADXL345_BlockDataUpdate_Single ((uint8_t)0x80)

#define ADXL345_BLE_LSB ((uint8_t)0x00)

#define ADXL345_BLE_MSB((uint8_t)0x40)

#define ADXL345_HIGHPASSFILTER_DISABLE ((uint8_t)0x00)

#define ADXL345_HIGHPASSFILTER_ENABLE ((uint8_t)0x10)

#define ADXL345_INT1INTERRUPT_DISABLE ((uint8_t)0x00)

#define ADXL345_INT1INTERRUPT_ENABLE((uint8_t)0x80)

#define ADXL345_INT2INTERRUPT_DISABLE ((uint8_t)0x00)

#define ADXL345_INT2INTERRUPT_ENABLE((uint8_t)0x08)

#define ADXL345_INT1INTERRUPT_LOW_EDGE ((uint8_t)0x20)

#define ADXL345_INT1INTERRUPT_HIGH_EDGE ((uint8_t)0x00)

#define ADXL345_BOOT_NORMALMODE ((uint8_t)0x00)

#define ADXL345_BOOT_REBOOTMEMORY ((uint8_t)0x80)

#define ADXL345_HPM_NORMAL_MODE_RES ((uint8_t)0x00)

#define ADXL345_HPM_REF_SIGNAL ((uint8_t)0x10)

#define ADXL345_HPM_NORMAL_MODE ((uint8_t)0x20)

#define ADXL345_HPM_AUTORESET_INT ((uint8_t)0x30)

#define ADXL345_HPFCF_0 0x00

#define ADXL345_HPFCF_1 0x01

#define ADXL345_HPFCF_2 0x02

#define ADXL345_HPFCF_3 0x03

#define ADXL345_HPFCF_4 0x04

#define ADXL345_HPFCF_5 0x05

#define ADXL345_HPFCF_6 0x06

#define ADXL345_HPFCF_7 0x07

#define ADXL345_HPFCF_8 0x08

#define ADXL345_HPFCF_9 0x09

#define ADXL345_CS_LOW() GPIO_ResetBits(ADXL345_SPI_CS_GPIO_PORT, ADXL345_SPI_CS_PIN)

#define ADXL345_CS_HIGH() GPIO_SetBits(ADXL345_SPI_CS_GPIO_PORT, ADXL345_SPI_CS_PIN)

void ADXL345_Init(ADXL345_InitTypeDef *ADXL345_InitStruct)

void ADXL345_RebootCmd(void)

void ADXL345_INT1InterruptCmd(uint8_t InterruptState)

void ADXL345_INT2InterruptCmd(uint8_t InterruptState)

void ADXL345_INT1InterruptConfig(ADXL345_InterruptConfigTypeDef *ADXL345_IntConfigStruct)

uint8_t ADXL345_GetDataStatus(void)

void ADXL345_FilterConfig(ADXL345_FilterConfigTypeDef *ADXL345_FilterStruct)

void ADXL345_FilterCmd(uint8_t HighPassFilterState)

void ADXL345_Write(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite)

void ADXL345_Read(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead)

2.ADXL345的SPI配置函数

void SPI_init(void)

{

GPIO_InitTypeDef GPIO_InitStructure

SPI_InitTypeDefSPI_InitStructure

R


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12133215.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存