我要发帖 回复

正式会员

2

主题

29

积分

0

专家分

:

私信
发表时间 : 2012-8-30 15:12:39 | 浏览 : 1124    评论 : 4

  我是一个Vega Prime新手,现在想做一个简单的无人机飞行仿真,由于对MFC也不大熟,
因此选择了在控制台下编制仿真程序,下面是我在VS2003编制的基于控制台的仿真程序。
(UAV.acf是在Vega Prime2.0中配置好的文件,里面只加入了一张地图、一个飞行器、一
个Transform和一个Observer)
  仿真开始没啥问题,可是当持续一段时间(10s~120s)之后飞行器就会莫名地消失,消
失以后视角还是按照原来的轨迹飞行,可是就是看不见飞行器,此后飞行器可能会突然闪
现半秒钟或一两秒钟又消失,不知这是什么原因造成的?另外,不知本人设置的这种用定
时器进行仿真调用的方式是不是有问题?

#include "stdafx.h"
#include <vpApp.h>
#include <vpIsector.h>
#include <vpObject.h>
#include <vpTransform.h>
#include <Windows.h>   //timeSetEvent必须包含
#include <Mmsystem.h>  //timeSetEvent必须包含
#pragma comment(lib,"winmm.lib")//timeSetEvent必须包含
#include <math.h>



vpObject *pUAV;

//飞行器位置坐标:x,y,z
double uav_x = 1990;
double uav_y = 1000;
double uav_z = 60;
//飞行器姿态角:偏航,俯仰,滚转
double uav_heahing = -60;
double uav_pitch = 10;
double uav_roll = -10;

const double uav_velo = 1.0;//飞行器速度
const double ang2rad = 3.1415926/180.0;//角度->弧度转换常量
DWORD timeUser=0;


//初始化,读取对象
void myInit(void)
{
        pUAV = vpObject::find("uav");//读取uav对象
        if(pUAV == NULL)
        {
                vuNotify::print(vuNotify::LEVEL_WARN, NULL, "farmhouse not found");
        }
}

//定时器回调函数
int PASCAL TimeOutProc(UINT wTimerID, UINT msg,DWORD timeUser,DWORD dwl,DWORD dw2)
{
        //偏航角计算
        uav_heahing += 0.1;
        if(uav_heahing > 360.0)
        {
                uav_heahing -= 360.0;
        }
        //x-y平面坐标计算
        uav_x += uav_velo * sin(-ang2rad * uav_heahing);
        uav_y += uav_velo * cos(-ang2rad * uav_heahing);

        pUAV->setTranslate(uav_x, uav_y, uav_z);//设置飞行器位置
        pUAV->setRotate(uav_heahing, uav_pitch, uav_roll);//设置飞行器姿态角

        return 0;
}


int _tmain(int argc, _TCHAR* argv[])
{
        uint timer;
        vp::initialize(argc, argv);//初始化VP
        vpApp *app = new vpApp;
        app->define("UAV.acf");//读入VP仿真文件
        app->configure();//配置应用

        myInit();//初始化
        timer = timeSetEvent(10,0,(LPTIMECALLBACK)TimeOutProc,timeUser,TIME_PERIODIC);//启动定时器,10ms
        app->run();//仿真循环
        timeKillEvent(timer);//关闭定时器

        app->unref();//取消引用
        vp::shutdown();//退出VP

        return 0;
}

最近VR访客

icelee 评论于2012-9-2 20:39:44
1、控制台要比MFC直接 如果用MFC框架的话,需要定义变量才能实现一些基本功能。
2、显卡是什么显卡?看看线性输出有没有问题,就是在lp下直接运行看看线性与帧数对不对。
3、fov设置的是什么?是否有误。
4、模型有误lod?进场与出场级别是多少?
sichuanwww 评论于2012-9-3 10:02:20
很可能是观察者与物体之间的位置问题。
努力挣钱,快乐生活!
LittleGbc 评论于2012-9-26 12:51:45
学习,顶一下。
LittleGbc 评论于2012-9-26 19:13:33
学习,顶一下。

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

GMT+8, 2021-8-2 05:49 PM

返回顶部