导航

vega编程中文资料

Posted on 2005-09-20 23:07  yunbo  阅读(1593)  评论(0编辑  收藏  举报

1、通用API函数:
   Vega通用API函数能操作大多数的Vega类和对象(注意不是全部)。
1.1   Vega结构类:
     Vega的结构类列表列出了Vega中可用类实例的类型,你能看到它们中的大多数都是Lynx面版中的对象。
当用户建立了一个Vega类实例的时候,也就提供了一个指向类结构的指针,MPI提供了函数去操纵这些结构元素,
因此用户不必了解它的数据结构,虽然这个数据结果对用户是透明的。当MPI改变了这个数据结构时,用户原有的
程序代码没有必要跟着改变,所有的数据类型都在vg.h中定义。
      VGTYPE_CHAN         VGTYPE_MOTION
      VGTYPE_WINDOW       VGTYPE_GFX
      VGTYPE_OBSERV       VGTYPE_ENV
      VGTYPE_SCENE    VGTYPE_ ISECTOR
      VGTYPE_ SYSTEM   VGTYPE_VOL
      VGTYPE_ OBJECT      VGTYPE_LIGHT
      VGTYPE_DBM       VGTYPE_FOG
      VGTYPE_PLAYER    VGTYPE_ENVFX
      VGTYPE_IODEV   VGTYPE_POS  VGTYPE_TFLOD
1.2   隐藏的Vega结构类:
     以下的结构类列表列出的是不能通过Lynx进行操作的类类型,通过这些隐藏类的指针和API函数用户可以建立更
强大、更易控制、更灵活的应用程序,但这些功能是不能仅仅通过图形用户界面的设置来获得的。
     VGTYPE_PART     VGTYPE_DATASET
     VGTYPE_CLASSDEF    VGTYPE_CTAB
     VGTYPE_DLIST      VGTYPE_EVENT
     VGTYPE_IOMAP      VGTYPE_MCODE
     VGTYPE_LIST

2  Vega的术语、函数构词法、
      Vega函数名字是混合实例的,如vgChanWin。MPI效仿performer格式命名函数和对象属性。函数以动-名词格式命名,
以下大家都知道,我不列了。
      构词法就列几个例子大家看看吧:
      vgSrcAssoc(source,association)
      vgAddSrcAssoc(source,association)
      vgRemSrcAssoc(source,association)
      vgGetSrcAssoc(source,association)

3、Vega通用函数(1)
    vgGetType       返回Vega类的类型;
    vgName          命名一个Vega类的对象;
    vgGetName       拷贝引用类对象的字符串名到用户字符数组;
    vgGetNameLen    获得列出对象名的长度;
    vgDelete        删除指定的类对象;
    vgUpdate        更新类对象,许多Vega类对象都需要周期性的更新以保持其值的有效性,大多数对象通过vgSync
                    和vgFrame每帧更新,但系统之外创建的对象则需要周期性的更新;
    vgProp          设置Vega类对象的属性;
    vgGetProp       获得当前Vega类对象的属性;
    vgCopy          拷贝源对象到目标对象,排斥对象名、对象关联和设置的回调;
举例:
    //返回Vega类的类型
      Type=vgGetType(Class);
      if  (Type=VGTYPE_OBJECT)
             print  ("found an object" ;
      else
             print   ("found something else" ;

    //创建和命名一个对象
      myObject=vgNewObject();
      vgName(myObject,"egghead" ;

    //删除指定的类对象
      myPlayer=vgFindPlyr("Drive Car" ;
      vgDelete(myPlayer);

    //vgProp等
       vgMotion  *myMotionModel;
       float     mmType;
       myMotionModel=vgFindMot("mm" ;      //ADF定义了mm
       mmType=vgGetProp(myMM,VGMOT_MODEL);
       switch(mmType)
       {
             case  VGMOT_DRIVE:
                 vgProp(myMM,VGMOT_MODEL,VGMOT_DRIVE);
             break;
             case  VGMOT_SPIN:
                 vgProp(myMM,VGMOT_MODEL,VGMOT_SPIN);
             break;
             case  VGMOT_WARP:
                 vgProp(myMM,VGMOT_MODEL,VGMOT_WARP);
             break;
             case  VGMOT_UF
                 vgProp(myMM,VGMOT_MODEL,VGMOT_UFO);
             break;
             case  VGMOT_USER1:
                 vgProp(myMM,VGMOT_MODEL,VGMOT_USER1);
             break;
        }
4、Vega通用函数(2)
    vgPrint                以标准格式打印Vega实例信息(可以自定义),主要用于调试;
    vgUserData             赋予一个指针到一些实例的用户自定义数据;
    vgGetUserData          获得用户数据的指针;
    vgWriteADF             以ADF格式打印一个实例的信息;
    vgAddFunc              对Vega实例增加一个回调;
    vgDelFunc              对Vega实例移去一个回调;
这里就不举例了。

5、Vega通用函数回调
    VGCOMMON_POS           放置回调时调用;
    VGCOMMON_DELETE        删出回调前调用;
    VGCOMMON_COPY          复制回调前调用;
    VGCOMMON_STATE         回调状态改变时调用;
    VGCOMMON_PRINT         类打印时调用;
    VGCOMMON_NEW           类实例化前调用;
    VGCOMMON_POSTUPDATE    回调更新后调用;
举个例子:
    void PositionCallback(vgCommon*,void*);    //函数原形
    vgMotion   *myMM;                          //声明变量
    myMM=vgGetMot(0);                          //获得运动模型的指针
    vgAddFunc(myMM,VGCOMMON_POS,PositionCallBack,0)
                                     //在运动模式上对每个位置事件设置一个回调函数
    void  PositionCallBack(vgCommon *myMM,void *udata);
      {
        vgPosition   *currentPosition;
        currentPosition=vgGetPos(myMM);
        vgPrint(currentPosition);
      }                              //回调函数结束

6、Vega位置函数
   Vega位置函数(vgPos)用于操纵位置和方向,可以是单精度数值、双精度数值、单精度矩阵、双精度矩阵。
    vgNewPos
    vgPosVec         定义位置和方向;
    vgGetPosVec      获得矢量信息;
    vgDelPos         删除一个位置值;
    vgCopyPos        复制一个位置值;
    vgGetPosDtype    获得一个储存于vgPostion句柄中的数据的数据类型;
    vgPosVecD/vgGetPosVecD      设置/获取double型数值位置;
    vgPosMat/vgGetPosMat        以4*4矩阵格式定义/释放位置和方向信息;
    vgPosMatD/vgGetPosMatD      以双精度数值4*4矩阵格式定义/释放位置和方向信息;
    vgPosTime        时间—位置函数,当位置需要进行以内插值替换等操作时可以使用;
    vgGetPosTime     获取双精度时间—位置信息;
    vgSubPos         计算2个不同位置对象的不同点,结果以单精度储存,只对X,Y,Z进行操作;
    vgSubPosD        计算2个不同位置对象的不同点,结果以双精度储存,只对X,Y,Z进行操作;
    vgPos            在世界坐标系中以CPos类定位一个对象;
    vgGetPos         获取一个对象的位置并将其拷贝到vgPosition结构中;
    vgGetWCSPos      返回世界坐标系的位置值;

举个例子:
    vgObject  *object;
    vgPostion  *myPos;
    float X,Y,Z,H,P,R;

    object=vgFindObj("egg");
    myPos=vgNewPos();
    vgGetPos(object,myPos);
    vgGetPosVec(myPos,&X,&Y,&Z,&H,&P,&R);
    X+=100;
    R+=10;
    vgPosVec(myPos,X,Y,Z,H,P,R);
    vgPos(object,myPos);