osgWidget是通过HUD来实现的一个嵌入OSG中的响应界面,和功能更加强大的CEGUI类似。
WindowManager 是osgWidget管理类,继承自Switch,可以识别事件的响应,添加各种窗体,例如button
、label等。WindowManager还可以支持Lua、Python等脚本文件,通过ScriptEngine进行脚本解析。
Event定义事件,EventInterface定义响应事件的接口。
通过StyleManager来定义窗体的样式。
接下来在main中通过osgWidget::Box定义了一个容器,加载了ColorLabelMenu
osgWidget可能是参考Qt进行设计的,设计的方法类似Qt,widget是基类,label等从widget继承,,之
前说过osgWidget是通过HUD加入到OSG场景中的,那么这个HUD在什么地方呢?
找到osgWidget::Util中的createOrthoCamera 很熟悉,创建了一个平行投影的相机,
camera->getOrCreateStateSet()->setMode(
GL_LIGHTING,
osg::StateAttribute::PROTECTED | osg::StateAttribute::OFF
);
camera-
>setProjectionMatrix(osg::Matrix::ortho2D(0.0, width, 0.0f, height));
camera-
WindowManager 是osgWidget管理类,继承自Switch,可以识别事件的响应,添加各种窗体,例如button
、label等。WindowManager还可以支持Lua、Python等脚本文件,通过ScriptEngine进行脚本解析。
Event定义事件,EventInterface定义响应事件的接口。
通过StyleManager来定义窗体的样式。
接下来在main中通过osgWidget::Box定义了一个容器,加载了ColorLabelMenu
osgWidget可能是参考Qt进行设计的,设计的方法类似Qt,widget是基类,label等从widget继承,,之
前说过osgWidget是通过HUD加入到OSG场景中的,那么这个HUD在什么地方呢?
找到osgWidget::Util中的createOrthoCamera 很熟悉,创建了一个平行投影的相机,
camera->getOrCreateStateSet()->setMode(
GL_LIGHTING,
osg::StateAttribute::PROTECTED | osg::StateAttribute::OFF
);
camera-
>setProjectionMatrix(osg::Matrix::ortho2D(0.0, width, 0.0f, height));
camera-