01 Hello OSG

环境:Windows 7,OSG 2.8,VisualStudio 2008

前提:已经成功配置了OSG的环境

本节的主要功能:显示一个滑翔机(Glider.osg)模型,增加一个事件处理,指定窗口大小。

 

一、新建Win32的控制台工程,不要建立空的Win32程序。因为空的Win32 不会创建预编译文件stdafx.h,这个预编译头文件的功能可以加快编译速度,后面会用到。

二、在main函数中增加代码如下:

上面的代码是编译不过去的,因为用到的OSG中的类型和函数没有引入。

osgViewer是一个名字空间,Viewer对应了#include <osgViewer/viewer>

osg::Node对应了 #include <osg/Node>  不过这个文件可以不用include,因为osgDB::ReadNodeFile对应的头文件已经包含了Node的头文件

osgDB::ReadNodeFile对应了#include <osgDB/ReadFile>

将这几个头文件放到stdafx.h中可以加快编译速度。如果将其放在main函数的头部,每次修改main函数所在的文件,编译器都要重新导入这些文件,编译速度很慢。

此时Build工程,会出现Link错误,因为值解决了编译层次的问题,还应该将对应的静态库指定给连接器。注意!本系列文章中的所有程序都使用Debug版本,所以所有Lib库都有"d"字样。

继续在stdafx.h中增加库的引用

到此,就可以运行出来一个完整的程序。截图不放了。

 

三、指定OSG窗口的大小

  上面的程序运行起来是全屏模式,这样对于调试程序很不方便。于是想设置窗口为800*600(我的屏幕是1280*800)。研究了一番,使用如下代码:

如果不要用viewer.realize()函数,则pWnd变量是空值,realize函数创建了像机的图形环境。创建GraphicsContext的代码挺多。如果不在此处调用realize那么就没有时机去修改窗口的大小,因为引入run函数后,就进入消息循环。其实run函数中也会判断是否调用了realize,如果之前没有调用过,run函数中会调用。

 

四、增加OSG自带的事件处理HelpHandler处理'h'键

  HelpHandler的作用是按下h键时,在屏幕上输出帮助文本。若要使用HelpHandler需要增加如下代码

 

 HelpHandler从GUIEventHandler继承,因此可以使用Viewer上通用的增加事件处理器的方法,将其加入到viewer中。

 

viewer.addEventHandler();

  HelpHandler中聚合了一个像机对象(camera)。在键盘上按下H键,会触发HelpHanlder的handle()方法。在方法中,如果是第一次调用该函数,即如果HelpHandler还没有初始化,则调用:

 

通过跟踪调试发现,

1)setUpHUDCamera中给Camera设置GraphicsContext,设置投影矩阵,并设置视口。Camera是在HelperHandler的构造函数中创建的。

2)setUpScene是给这个相机增加数据。在在Camera节点中,增加了Switch节点,并且增加了Geode和drawable类型的对象(text)。给Switch节点设置状态属性。

 

小结:

 

    明白了Realize函数的大概作用,了解了HUD基本原理。后面会深入研究关于相机的原理。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值