OSG下如何自定义显示屏幕大小,设置显示框属性,不至于模型显示时充满屏幕。
osg在做调试分析时,一般显示模型窗口会充满整个屏幕,不利于信息显示,和程序调试。以下两个函数会对osg窗口进行渲染和属性配置。
viewer->realize();
viewer->run();
如何做才能使窗口不充满整个屏幕?
只需要增加一个继承于osgGA::GUIEventHandler的类,然后重写handle事件就可以了
具体代码 代码片
.
// An highlighted block
// OSGStuday.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <osg/Node>
#include <osgGA/GUIEventAdapter>
#include <osgGA/GUIEventHandler>
#include <osgGA/GUIActionAdapter>
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
class ChangeViewerSize:public osgGA::GUIEventHandler
{
public:
ChangeViewerSize();
~ChangeViewerSize();
virtual bool handle(const osgGA::GUIEventAdapter & ea, osgGA::GUIActionAdapter & us);
private:
bool m_isFrist;
};
ChangeViewerSize::ChangeViewerSize()
{
m_isFrist = true;
}
ChangeViewerSize::~ChangeViewerSize()
{
}
bool ChangeViewerSize::handle(const osgGA::GUIEventAdapter & ea, osgGA::GUIActionAdapter & us)
{
if (m_isFrist)
{
m_isFrist = false;
osgViewer::Viewer *vie = dynamic_cast<osgViewer::Viewer *>(&us);
osgViewer::Viewer::Windows ws;
//得到窗口
vie->getWindows(ws);
if (!ws.empty())
{
osgViewer::Viewer::Windows::iterator iter = ws.begin();
for (; iter != ws.end(); iter++)
{
//可以自己设定大小
(*iter)->setWindowRectangle(300, 150, 600, 300);
//是否有窗口边框
(*iter)->setWindowDecoration(true);
}
}
}
return false;
}
int main()
{
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
osg::ref_ptr<osg::Group> root = new osg::Group();
osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("cow.osg");
root->addChild(node);
viewer->setSceneData(root);
//事件入口
viewer->addEventHandler(new ChangeViewerSize());
viewer->realize();
viewer->run();
return 0;
}