我要发帖 回复

新手上路

1

主题

12

积分

0

专家分

:

私信
发表时间 : 2007-12-28 21:09:06 | 浏览 : 2648    评论 : 19
vega编程中文资料<vega基础>
以前在学习vega的过程中,曾对其开发文档的大部分章节进行了翻译和整理,不幸的是在一次系统重装的过程中,忘记备份这些资料,被覆盖丢失了。现在有一些残留,发上来与大家交流。
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);

最近VR访客

ziye 评论于2008-3-4 15:15:06
谢谢了!
wangxueping 评论于2008-3-6 10:39:59
谢谢了
oucluo 评论于2008-3-7 09:14:06

回复 1# 的帖子

好东西
谢谢
zwb3119487 评论于2008-3-13 15:19:13
谢谢了
lovewangshuang 评论于2008-4-8 15:06:43
谢谢了
rockstars 评论于2008-4-14 20:35:11
顶了
paracc 评论于2008-5-20 20:48:22
谢谢了
20080518 评论于2009-5-27 22:15:07
非常有用啊,谢了
新手 评论于2009-8-11 15:59:33
谢谢啦
shiweizhen123 评论于2009-8-13 09:16:14
谢谢分享,想帮你加分但是显示不出来分数无法操作,以后加吧,呵呵
huxiaobo 评论于2010-3-22 15:55:58
怎么加分啊像给你加
的啊
yongenmi_2004 评论于2010-3-22 21:39:33
谢谢,正需要啊
海浪 评论于2010-3-23 20:04:35
好像是分值限制
wnek28 评论于2010-3-23 20:44:16
好东西  谢谢啦
7870477 评论于2010-4-4 12:08:36
好东西
谢谢
zhangjing1003 评论于2010-4-6 16:29:21
谢谢了
NJAlvin 评论于2010-5-17 14:04:24
非常感谢!
thinks_thinking 评论于2010-5-22 19:56:53
感谢
ggw0122 评论于2011-4-7 21:53:53
学习了,谢谢

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

GMT+8, 2021-9-18 12:27 AM

返回顶部