多谢楼上的,是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;
} |