我要发帖 回复

正式会员

19

主题

89

积分

0

专家分

:

私信
发表时间 : 2009-7-26 10:41:26 | 浏览 : 1661    评论 : 8
/****************************************************************************/
/* 程序功能:代码实现小物体fil模型的加载 ,达到小物体旋转效果 */
/* 完成时间:2009年7月26日                                  */           
/*****************************************************************************/
#include "stdafx.h"
#include "vg.h"
#include "vgperf.h"
vgObject* createNewVegaObject(const char*filepath,const char*name);
void main()
{
   float x=0.0, y=0.0, z=0.0, h=0.0, p=0.0, r=0.0;
   vgObject *obj;
   vgScene *scene;
   vgObserver *obs;
   vgPosition *pos;
   char *a="kj.flt";//指明物体模型路径(此处为当前工程文件夹)
   char *q="kj";
    vgInitSys();
    vgDefineSys("my.adf");//要先建一个空ADF文件
    vgConfigSys();
pos = vgNewPos();//创建一个位置坐标
    obj=createNewVegaObject(a,q);
scene = vgNewScene();
    vgAddSceneObj(scene,obj);//将对象物加入场景中
obs = vgGetObserv(0);
vgObservScene(obs, scene);
while(1)
{      
  //vgPosVec(pos,x+2500,y+2520.0f,z,h,p+30.0f,r+25.0f);
  vgPosVec(pos,x,y+10,z,h,p+30.0f,r+25.0f);  
  vgPos(obj,pos);  
  h+=1.0f;
  vgSyncFrame();
  vgFrame();  
}  
}
/*************************************************/
/* 函数名称:createNewVegaObject()               */
/* 函数功能:对象物的动态载入                    */
/*************************************************/  
vgObject* createNewVegaObject( const char *filepath , const char *name )
{
    vgDataSet *ds = NULL;
    vgObject *obj = NULL;
    vgPosition *pos = NULL;
    int loaded = VG_FAILURE;

    if(filepath == NULL)
         return NULL;
    ds = vgNewDS();
    if(ds == NULL)
         return NULL;
   
    vgName(ds,filepath);  
    vgProp(ds,VGDS_FLTLOADER,VGDS_SSMGFLT);
    vgProp(ds,VGDS_IMMEDIATE,VG_TRUE);   
    vgProp(ds,VGDS_CREATECONSTRAINTS,VG_OFF);   
    loaded = vgLoadDS( ds);
    if( loaded != VG_SUCCESS )
{  
        vgDelete(ds);
        return NULL;
    }
    obj = vgNewObj();
    if(ds == NULL)
{
        vgDelete(ds);
        return NULL;
    }
    vgName(obj,name);
    vgProp(obj,VGOBJ_CS,VGOBJ_DYNAMIC);
    vgProp(obj,VGOBJ_PARTS,VG_ON);
vgProp(obj,VGOBJ_CONSTRAIN,VG_OFF);   
    vgProp( obj, VGOBJ_SCALE, 2.0f ); //模型放大为两倍大小
    //这些都可以采取默认的方式,也就是说这些语句可以不要
   
    vgProp(obj,VGOBJ_OPTIM,VGOBJ_CLEAN);   
    vgProp(obj,VGOBJ_OPTIM,VGOBJ_FLATTEN);

    pos = vgNewPos();
    if(pos != NULL)
{
        vgPosVec(pos,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f);
        vgPos( obj, pos );
        vgDelPos( pos);
    }
    vgObjDS(obj, ds);//将几何体赋予对象物
    vgMakeObj(obj,VGOBJ_COPY);//构造数据对象层次
    vgObjClass(obj,0xFFFFFFFF);
    vgObjRepresent(obj,0xFF000000);
    return obj;
}

最近VR访客

sdsd2000 评论于2009-7-26 16:06:42
好的支持
zsl 评论于2009-7-26 16:42:44
有个小问题:怎么样在原来的小镇环境中加入自己的模型?我把my.adf改为town.adf后显示的还是单个的小物体在旋转。请高手指点!!!
sdsd2000 评论于2009-7-27 10:19:28
可以在lynx中加入,也可以程序中动态载入,有时看不到可能是视点问题
zsl 评论于2009-7-27 21:08:29
多谢楼上的,是obs问题,已经解决了

//#########################################################
//程序功能:子函数法小镇场景中代码添加小物体的flt模型文件
//完成时间:2009年7月27日  
//#########################################################
#include "stdafx.h"
#include "vgperf.h"
#include "vg.h"
vgObject* createNewVegaObject(const char*filepath,const char*name);
void main()
{
        vgObject *obj;
        vgObject *objfly;
        vgScene *sce;
        vgPosition *pos;
        vgPath *path;
        vgPlayer *plyr;
        vgObserver *obs;
        vgMotion *mot;

        vgInitSys(); //初始化系统
        vgDefineSys("town.adf");
        vgConfigSys();

        char *a="kj.flt";//指明物体模型路径(此处为当前工程文件夹)
    char *q="kj";
        char *i="fly.flt";//指明物体模型路径(此处为当前工程文件夹)
    char *j="fly";
    obj=createNewVegaObject(a,q);//将kj.flt加入obj
        objfly=createNewVegaObject(i,j);//将fly.flt加入objfly
        pos = vgNewPos();//创建一个位置坐标
        //vgPosVec(pos,2500.0f,2550.0f,2.0f,0.0f,0.0f,0.0f);       
        //vgPos(objfly,pos);
        sce=vgGetScene(0); //申请sce
        vgAddSceneObj(sce,obj); //往sce中加入obj
        vgAddSceneObj(sce,objfly); //往sce中加入objfly
       
        obs = vgGetObserv(0); // 得到视点
    mot = vgGetMot(0);
        vgProp(mot,VGCOMMON_ENABLED,VG_ON);
        vgProp(mot,VGMOT_MODEL,VGMOT_DRIVE);//设置运动方式为SPIN
        vgProp(mot,VGOBS_TETHERSTATE,VGOBS_DYNAMIC);
        vgObservMot(obs,mot);       
        float y=0.0f,z=0.0f;
        while(y<200)
        {
                vgPosVec(pos,2500.0f,y+2600.0f,z,0.0f,10.0f,0.0f);       
                vgPos(objfly,pos);
                y+=1.0f;
                //z+=0.05f;
                vgSyncFrame();
                vgFrame();                       
        }
        while(1)
        {
                vgPosVec(pos,2500.0f,y+2600.0f,z,0.0f,10.0f,0.0f);       
                vgPos(objfly,pos);
                //y+=1.0f;
                //z+=0.05f;
                vgSyncFrame();
                vgFrame();                       
        }
}
//#############################################################
//子函数名称:createNewVegaObject()
//功能:加载flt文件
//#############################################################
vgObject* createNewVegaObject(const char*filepath,const char*name)
        {
                vgDataSet *ds = NULL;
                vgObject *obj = NULL;
                vgPosition *pos = NULL;
                int loaded = VG_FAILURE;
               
                if(filepath == NULL)
                        return NULL;
                ds = vgNewDS();
                if(ds == NULL)
                        return NULL;       
                vgName(ds,filepath);  
                vgProp(ds,VGDS_FLTLOADER,VGDS_SSMGFLT);
                vgProp(ds,VGDS_IMMEDIATE,VG_TRUE);   
                vgProp(ds,VGDS_CREATECONSTRAINTS,VG_OFF);   
                loaded = vgLoadDS( ds);
                if( loaded != VG_SUCCESS )
                {  
                        vgDelete(ds);
                        return NULL;
                }
                obj = vgNewObj();
                if(ds == NULL)
                {
                        vgDelete(ds);
                        return NULL;
                }
                vgName(obj,name);
                vgProp(obj,VGOBJ_CS,VGOBJ_DYNAMIC);
                vgProp(obj,VGOBJ_PARTS,VG_ON);
                vgProp(obj,VGOBJ_CONSTRAIN,VG_OFF);   
                vgProp( obj, VGOBJ_SCALE, 2.0f ); //模型放大为两倍大小
                //这些都可以采取默认的方式,也就是说这些语句可以不要
               
                vgProp(obj,VGOBJ_OPTIM,VGOBJ_CLEAN);   
                vgProp(obj,VGOBJ_OPTIM,VGOBJ_FLATTEN);
               
                pos = vgNewPos();
                if(pos != NULL)
                {
                        vgPosVec(pos,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f);
                        vgPos( obj, pos );
                        vgDelPos( pos);
                }
                vgObjDS(obj, ds);//将几何体赋予对象物
                vgMakeObj(obj,VGOBJ_COPY);//构造数据对象层次
               
                vgObjClass(obj,0xFFFFFFFF);
                vgObjRepresent(obj,0xFF000000);
               
                return obj;
}
nceputao 评论于2009-9-11 10:22:33
哥们,请问我编译时说是不能打开“stdafx.h”文件是什么意思啊?
谢谢你的代码!!有机会还得向诸位请教
nceputao 评论于2009-9-11 14:14:07
5# zsl

能不能加你qq跟你学习一下啊?谢谢
ggw0122 评论于2011-4-10 18:04:27
谢谢分享
ggw0122 评论于2011-4-10 18:05:08
谢谢分享

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

GMT+8, 2021-2-25 03:13 PM

返回顶部