Win32下如何更改OSG显示窗口的大小,不使模型窗口充满整个屏幕。

本文介绍如何在 OSG 中自定义窗口大小及位置,通过创建一个 GUI 事件处理器类来实现模型显示窗口的定制化调整,避免模型充满整个屏幕。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值