理论教育 全屏设计仿真场景-Vega Prime 虚拟现实开发技术

全屏设计仿真场景-Vega Prime 虚拟现实开发技术

时间:2023-11-25 理论教育 版权反馈
【摘要】:仿真场景的全屏显示,主要包含两个步骤:一是vpWindow的属性设置,这里主要是关闭其全屏属性,以便于后面根据屏幕尺寸改变vpWindow的尺寸。实际设计中,还包含相关的辅助设计。图6.27.1仿真场景全屏控制当然,用户还可以根据需要做更多的控制。

全屏设计仿真场景-Vega Prime 虚拟现实开发技术

对于仿真环境的控制,某些时候需要单独全屏显示仿真场景。仿真场景的全屏显示,主要包含两个步骤:

一是vpWindow的属性设置,这里主要是关闭其全屏属性,以便于后面根据屏幕尺寸改变vpWindow的尺寸。

vpWindow * vpWin= * vpWindow::begin();

vpWin->setFullScreenEnable(false);

二是根据需要获得屏幕的尺寸,设置仿真场景的尺寸:

int width=::GetSystemMetrics(SM_CXSCREEN);

int height=::GetSystemMetrics(SM_CYSCREEN);

::MoveWindow(PublicMember::CTS_MainWindow,0,0,width,height,true);

::MoveWindow(PublicMember::CTS_RunningWindow,0,0,width,height,true);

vpWindow * vpWin= * vpWindow::begin();

vpWin->setSize(width,height);

有了这两个步骤,就可以自由控制仿真场景的尺寸大小了。

实际设计中,还包含相关的辅助设计。首先在PublicMember 中定义了两个静态窗口指针

//场景窗口句柄

static HWND CTS_RunningWindow;

//程序主窗口句柄

static HWND CTS_MainWindow;

然后进行初始化

HWND PublicMember::CTS_RunningWindow =NULL;

HWND PublicMember::CTS_MainWindow=NULL;

并在适当的地方获取真实的值,本节是在“运行”按钮下进行赋值

PublicMember::CTS_MainWindow=theApp.GetMainWnd()->GetSafeHwnd();

CWnd *pWnd=GetDlgItem(IDC_grScene);

PublicMember::CTS_RunningWindow=pWnd->GetSafeHwnd();(www.daowen.com)

接着,在窗口函数PublicMember::CTS_Keyboard(vpWindow *window,vpWindow::Key key,int modifier,void *)中添加代码,按下M 键时,窗口全屏显示,按下N 键时,恢复到800×600的窗口:

其中的关键代码,首先是设置宽度和高度值,其次是设置主窗口的尺寸,接着是设置仿真窗口控件的尺寸,最后才是设置仿真窗口的尺寸。

最后,需要在VP 主线程中进行相关的配置:

//绘制场景

vpKernel::instance()->configure();

//设置观察者

PublicMember::CTS_pObject_observer=vpObject::find("Hummer");

PublicMember::CTS_pObject_observer->ref();

//设置窗体

vpWindow * vpWin= * vpWindow::begin();

vpWin->setParent(PublicMember::CTS_RunningWindow);

vpWin->setFullScreenEnable(false);

//设置键盘函数

vpWin->setInputEnable(true);

vpWin->setKeyboardFunc((vrWindow::KeyboardFunc)PublicMember::CTS_Keyboard,NULL);

vpWin->open();

::SetFocus(vpWin->getWindow());

在图6.27.1(a)中,按下M 键,仿真场景是单独全屏;在图6.26.1(b)中,按下M 键,仿真场景恢复原状。

图6.27.1 仿真场景全屏控制

当然,用户还可以根据需要做更多的控制。

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

我要反馈