现在的位置: 首页 > 综合 > 正文

VEGA编程——DOF指南

2012年10月30日 ⁄ 综合 ⁄ 共 1299字 ⁄ 字号 评论关闭
DOF节点在Creator中可以方便的被创建,也可以使用Local-DOF菜单下的DOF Viewer命令进行交互式的查看,关于如何创建DOF并设置相应的约束条件就不详细讲了,可以参考相应的帮助文档,或者Creator的中文书,如果有的话。
考虑在虚拟场景中有个可以被打开和关闭的门,要在Vega中实现交互控制该门的闭合,怎么办?对了,很简单,DOF!
在Creator中创建一个名为“door”的DOF节点,将门部分的模型,通常是个体节点放置到该节点下,用Set Local命令将DOF原点放置到门轴上,设置其绕门轴的旋转约束,比如绕Z轴,从0到120度。
注意,虽然可以在Creator中使用DOF Viewer查看其运动状态,但是在Vega中它是不会自动开关的,必须通过相应的API函数来控制,下面是一个简单的开门程序,大家可以举一反三,实现开/关门:
 1#include 
 2#include 
 3static void opentheDoor(void);
 4
 5main( int argc, char *argv[] )
 6{
 7
 8vgWindow* win;
 9if ( argc != 2 ) 
10{
11    printf( "Usage: %s ", argv[0] );
12    exit( -1 );
13    }
 
14     
15    vgInitSys( );
16     
17    vgDefineSys( argv[1] );
18
19vgConfigSys( );
20
21win = vgGetWin(0);
22while ( 1 )
23{
24  vgSyncFrame();
25  vgFrame();
26    
27  switch ( vgGetWinKey(win) )
28  {
29  //按下空格键开门
30  case ' ':
31     opentheDoor();
32     break;
33  default:
34   break;
35  }

36}

37}

38void opentheDoor()
39{
40  vgObject* obj;
41  vgPart* door;
42  vgPosition* pos;
43  int i;
44  float x, y, z, h, p, r;
45  obj = vgGetObj(0);
46  door = vgFindPart(obj, "door", NULL); //获取DOF
47  pos = vgNewPos();
48  vgGetPos(door, pos);
49  vgGetPosVec(pos, &x, &y, &z, &h, &p, &r);
50
51        for (i=0; i<120; i++)
52  {
53   h+=1;
54   vgPosVec(pos, x, y, z, h, p, r);
55   vgPos(door, pos);
56   vgSyncFrame();
57   vgFrame();
58  }

59  vgDelete(pos);
60
61}

抱歉!评论已关闭.