我要发帖 回复

正式会员

3

主题

33

积分

0

专家分

:

私信
发表时间 : 2009-8-24 23:27:45 | 浏览 : 1582    评论 : 8
本帖最后由 huyl2002 于 2009-8-24 11:29 PM 编辑

设置摇杆驱动vega程序。vega开发年代久远,输入设备支持串口的,现在的手柄或者摇杆大都是USB的,为了实现USB摇杆在VEGA中也能使用,查了很多资料。在本论坛上看到静涛大侠关于USB摇杆的帖子,有收获,加上自己的思索,现在初步能驱动vega,且稍简单。故发上来和大家分享:
step1:
首先在lynx中删除input device实例,删除motion module实例。然后active previewing ,在player面板中更改位置参数,可以发现原本静止的player位置随着参数输入而实时改变,这预示着可以再程序中我们自己变成来控制player的移动。

by the way,如何想到要删除这两个实例?因为实例存在的话,player位置只受控于motion module,除了motion module,别人更改不了player 位置。而motion module 实例从input device实例中接收控制数据。

step2: 用joyGetPos(JOYSTICKID1,pjoy1)来查询摇杆的状态。
by the way: 如何得知这个api函数? 百度:摇杆 api
话题回来,用joyGetPos之前要做如下设置:
static JOYINFO joy1;//查询joystick所得的数值放置在全局变量joy1中
JOYINFO *pjoy1;// 注意,这只是定义一个指针,占用4字节空间,而没有定义一个真实的JOYINFO空间,我以前犯过严重的错误,终于更改了,血的教训啊
pjoy1=&joy1;
//下一句是查询摇杆
joyGetPos(JOYSTICKID1,pjoy1);

step3: 获取player位置
              plyr=vgGetPlyr(0); // 获得player指针
              vgGetPos(plyr,pos);
              vgGetPosVec(pos,&x,&y,&z,&h,&p,&r);//获取player位置放入六个量中。

注:plyr=vgGetPlyr(0); 这个函数在vega programmer help没有任何提示,是偶猜出来的

step4: 根据摇杆的数值更改x,y,z,h,p,r
step5: vgPosVec(pos,x,y,z,h,p,r);  //用更新后的六个量重置观察者位置
   vgPos(plyr,pos);

最后提示:本程序的核心是用joyGetPos这个win api函数,为了能正常调用它,需要在程序始端添加“#include <mmsystem.h>”。在编译之前,project-settings-link,在category中选择input,然后在Object/library modules 中添加winmm.lib。(如何得知这一点?:从程序编译错误信息google一下便知)。
附件是编译后的EXE文件和所需要的adf文件。 摇杆VEGA.rar (5.45 KB, 下载次数: 63)

最近VR访客

nothing is impossible
sdsd2000 评论于2009-8-25 08:53:22
以前也弄过,顶你
Armybin 评论于2009-9-19 20:51:05
谢谢!!!!
ggw0122 评论于2011-4-14 21:27:18
谢谢分享
ggw0122 评论于2011-4-14 21:27:53
谢谢分享
ggw0122 评论于2011-4-14 21:28:44
谢谢分享
smilingx 评论于2011-10-10 20:28:08
多谢,学习中……
keliever 评论于2014-5-29 21:17:22
很好 看看 谢谢

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-9-20 02:57 PM

返回顶部