• VEGA编程——DOF指南


    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}
  • 相关阅读:
    JS 跨域问题。。
    LInq 中使用正则表达试
    CreateXMl
    DeleteXMl
    SameNameFile 比较两个文件夹是否同名
    UpdateXML
    AddXML
    AsDataView Dataview ,DataTable 跟linq的相互转化
    AttributeToElement
    WoreTime 计算单词出现的次数
  • 原文地址:https://www.cnblogs.com/yunbo/p/240784.html
Copyright © 2020-2023  润新知