理论教育 VegaPrime虚拟现实开发技术:启动应用主线程

VegaPrime虚拟现实开发技术:启动应用主线程

时间:2023-11-24 理论教育 版权反馈
【摘要】:在“关闭”按钮下添加以下代码:PublicMember::CTS_continueRunVP=false;Sleep;OnOK();第一行代码就是停止Vega Prime应用程序的帧循环;接着等待1 秒,使主线程正确地停止返回。这两个按钮的代码完成,就可以运行Vega Prime应用程序了。Vega Prime应用程序运行在了MFC 对话框程序里面。

VegaPrime虚拟现实开发技术:启动应用主线程

第5.2.2 节对VP3_2_7.cpp 中的main 函数进行了改造,改造为PublicMember的静态成员PublicMember::CTS_RunBasicThread。这其中还包含3个控制变量

● 场景窗口句柄:“static HWND CTS_RunningWindow;”这个变量就是某个控件的句柄,在这个应用中,把Vega Prime 仿真窗口显示在一个分组控件上。

● 控制VP 线程运行的变量:“static bool CTS_continueRunVP;”,Vega Prime应用程序配置完成后,就进入帧循环,要退出程序,首先应该退出帧循环,就用这个布尔变量来控制是否继续进行帧循环。

● VP 线程变量:“static CWinThread * CTS_vegaThread;”,用这个变量控制主线程。

在图5.2.9 中,PublicMember::CTS_RunBasicThread 函数首先调用静态函数vp::initialize (__argc,__argv)对 Vega Prime 进行初始化,其两个参数前面都是两根下划线;然后调用PublicMember::CTS_Define()函数进行场景定义;接着调用vpKernel::instance()-> configure()进行配置;接下来就是设置窗口,其中要特别注意的是vpWin->setParent (PublicMember::CTS_ RunningWindow),就把Vega Prime的窗口设置在了指定控件上,当然,在启动线程之前要给PublicMember::CTS_RunningWindow 赋值;最后就是进入帧循环,在每次帧循环后,可以在这里完成某些工作,现在,只是简单判断是否要停止帧循环,如果要停止,首先用vpKernel::instance()->unconfigure()取消配置,然后调用vp::shutdown(),关闭Vega Prime。

图5.2.9 Vega Prime应用程序主线程函数

在第5.2.1 节中改造了对话框程序,在“运行”按钮下添加以下代码:

CWnd *pWnd=GetDlgItem(IDC_grScene);

PublicMember::CTS_RunningWindow=pWnd->GetSafeHwnd();

PublicMember::CTS_continueRunVP=true;(www.daowen.com)

PublicMember::CTS_vegaThread=AfxBeginThread(PublicMember::CTS_RunBasicThread,this);

前两句代码就是获取ID 为“IDC_grScene”的分组框的句柄,并赋值给PublicMember::CTS_RunningWindow,作为Vega Prime应用程序运行的场所;接着为控制变量赋值,要允许帧循环;最后启动线程主函数。

在“关闭”按钮下添加以下代码:

PublicMember::CTS_continueRunVP=false;

Sleep(1000);

OnOK();

第一行代码就是停止Vega Prime应用程序的帧循环;接着等待1 秒,使主线程正确地停止返回。

这两个按钮的代码完成,就可以运行Vega Prime应用程序了。首先选择VC的菜单“调试”,然后选择其下的“直接运行(不调试)”。这样就可以编译生成第一个可运行的Vega Prime应用程序了,点击“运行”按钮,将会出现如图5.2.10所示的界面。Vega Prime应用程序运行在了MFC 对话框程序里面。与LynX Prime 里运行ACF 文件一样,在运行界面里可以用鼠标操作汽车:按鼠标左键,汽车加速前进;按鼠标右键,汽车后退。实例代码为 VPTestDialogBasic。

图5.2.10 改造后的MFC 对话框界面

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈