八、OSG学习笔记-

前一章节:

        七、OSG学习笔记-碰撞检测-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145558132?spm=1001.2014.3001.5501

一、了解OSG图元加载显示流程

本章节代码:

OsgStudy/wids · CuiQingCheng/OsgStudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/osg-study/tree/master/OsgStudy/wids

图解流程:

这里主要涉及的头文件类为:

#include<osgViewer/Viewer> // 依赖该文件

#include<osg/GraphicsContext> // 图形界面类
osg::GraphicsContext::WindowingSystemInterface // 设备类
#include<windows.h>
#include<iostream>
#include<osgViewer/Viewer> // 依赖该文件

#include<osg/GraphicsContext> // 图形界面类

int main()
{
	osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
	// osg::GraphicsContext::WindowingSystemInterface 为 Viewer,中静态创建的,只需要有Viewer,就可以了。
	osg::GraphicsContext::WindowingSystemInterface* ws = osg::GraphicsContext::getWindowingSystemInterface();
	if (!ws)
	{
		std::cout << "Get device interface failure, WindowingSystemInterface is Null" << std::endl;
	}
	else
	{
 // ws 就是设备窗口的对象。
		std::cout << "Get device interface success!" << std::endl;              
	}
	return 0;
}

下面代码中用于获取设备分辨率,跟设置分辨率:

#include<windows.h>
#include<iostream>
#include<osgViewer/Viewer>
#include<osg/GraphicsContext>


int main()
{
	osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
	// osg::GraphicsContext::WindowingSystemInterface 为 Viewer,中静态创建的,只需要有Viewer,就可以了。
	osg::GraphicsContext::WindowingSystemInterface* ws = osg::GraphicsContext::getWindowingSystemInterface();
	unsigned int height = 0;
	unsigned int width = 0;

	// 用于配置图形上下文(如窗口或离屏渲染环境)的核心类。
	// Traits: 类的主要功能是定义图形上下文的初始化属性,包括窗口属性、硬件加速选项、缓冲区配置等。
	//	       通过设置其成员变量,开发者可以灵活控制 OSG 应用程序的渲染环境。
	osg::GraphicsContext::Traits traits;

	if (!ws)
	{
		std::cout << "Get device interface failure, WindowingSystemInterface is Null" << std::endl;
	}
	else
	{
		std::cout << "Get device interface success!" << std::endl;
		ws->getScreenResolution(traits, width, height);
		std::cout << "系统分辨率为:" << width << " X " << height << std::endl;
		std::cout << "边框:" << traits.windowDecoration << std::endl;
		traits.x = 0;
		traits.y = 0;
		traits.width = 800;
		traits.height = 600;
		// 还可以设置设备的分辨率:(谨慎使用)
		ws->setScreenResolution(traits, 800, 600);//这句代码后两个参数会修改屏幕分辨率。

	}
	return 0;
}

程序执行结果如下图:

windows,中查看显示设置,如下图,结果表面二者结果一致,获取正确。

调整窗口大小:

代码如下:

#include<windows.h>
#include<iostream>

#include<osgViewer/Viewer>
#include<osgViewer/ViewerEventHandlers>
#include <osg/GraphicsContext>
#include <osgDB/ReadFile>

// UI事件
#include<osgGA/GUIEventHandler>
#include<osgGA/GUIActionAdapter>

class ChangeWindow : public osgGA::GUIEventHandler
{
public:
	ChangeWindow() {
		m_first = false;
	}
	bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
	{
		if (!m_first)
		{
			osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
			osgViewer::Viewer::Windows ws;
			m_first = true;
			viewer->getWindows(ws);
			if (!ws.empty())
			{
				// 设置窗口大小,启始坐标:
				osgViewer::Viewer::Windows::iterator iter = ws.begin();
				for (; iter != ws.end(); iter++)
				{
					(*iter)->setWindowRectangle(320, 100, 1600, 1000);

					// 去除边框:
					(*iter)->setWindowDecoration(false);

					// 设置不使用鼠标
					//(*iter)->useCursor(false);

					// 设置鼠标样式
					(*iter)->setCursor(osgViewer::GraphicsWindow::WaitCursor);
				}
			}
		}
		return false;
	}

private:
	bool m_first{false};
};

int main()
{
	osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
	osgViewer::Viewer::Windows ws;

	viewer->setSceneData(osgDB::readNodeFile("glider.osg"));

	viewer->getWindows(ws);
	if (ws.empty())
	{
		std::cout << "has not create windows" << std::endl;
	}
	viewer->addEventHandler(new ChangeWindow());
	
	viewer->run(); //  run 函数中创建窗口。
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/968382.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[笔记] 汇编杂记(持续更新)

文章目录 前言举例解释函数的序言函数的调用栈数据的传递 总结 前言 举例解释 // Type your code here, or load an example. int square(int num) {return num * num; }int sub(int num1, int num2) {return num1 - num2; }int add(int num1, int num2) {return num1 num2;…

在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.20.2

文章目录 1. 安装 nvm&#xff08;如果还没有安装的话&#xff09;2. 加载 nvm 配置3. 列出特定系列的 Node.js 版本&#xff08;远程&#xff09;&#xff1a;4. 安装 Node.js 16.20.25. 使用指定版本的 Node.js6. 验证安装 在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.…

物联网水质监测系统设计与实现/基于STM32的水产养殖云监控系统设计

背景 随着物联网技术的飞速发展&#xff0c;各行各业都在逐步实现智能化管理&#xff0c;水质监测系统作为环境监测中的一个重要环节&#xff0c;近年来备受关注。如何高效、精准地监测水质&#xff0c;尤其是在远程无法到达的地方&#xff0c;成为了一个迫切需要解决的问题。…

SAP Smartforms 货币和数量字段设置参考及格式,消息号是SSFCOMPOSER601

SAP Smartforms 货币和数量字段设置参考及格式&#xff0c;消息号是SSFCOMPOSER601 在开发SAP Smartforms 时&#xff0c;会遇到设置打印的货币字段或数量字段在打印预览时无法显示报错&#xff08;消息号是SSFCOMPOSER601&#xff0c;提示参考字段IS_DATA-GESME在表格中未知&…

Hbuildx开发的小程序,运行到微信开发者工具后,显示空白报错Pages not been registered yet,解决方法

问题描述&#xff1a; Hbuildx开发的小程序&#xff0c;运行到 微信开发者工具后&#xff0c;显示空白 报错Pages not been registered yet 解决方法&#xff1a; 1.检查报错的这个pages页面 &#xff0c;实际是否存在。 2.路由文件中是否定义了该pages页面。 3.路由文件中…

稀疏计算的软硬件协同:FPGA有力推动硬件发展

稀疏计算协同&#xff1a;FPGA驱动进步 ©作者|wcychuiyuw 来源|神州问学 引言 在当今科技飞速发展的时代&#xff0c;端侧算力的重要性日益凸显&#xff0c;其中 ASIC (专用集成电路) 和 SoC 架构 (System on Chips) 成为端侧算力不可或缺的重要组成部分。它们以其独特的…

Cell子刊《Patterns》最新综述:大语言模型Attention Heads的可解释性研究

自从大语言模型&#xff08;LLMs&#xff09;在各种任务中展现出卓越性能以来&#xff0c;其内部机制的解读已经成为领域内的热门话题。尽管许多研究人员从各个方面做出了尝试并得到了一些结论&#xff0c;但现阶段仍缺乏一个全面的视角来对现有成果进行系统化的归纳与总结。 为…

【Java八股文】01-Java基础面试篇

【Java八股文】01-Java基础面试篇 概念Java特点Java为什么跨平台JVM、JDK、JRE关系 面向对象什么是面向对象&#xff0c;什么是封装继承多态&#xff1f;多态体现的方面面向对象设计原则重载重写的区别抽象类和实体类区别Java抽象类和接口的区别抽象类可以被实例化吗 深拷贝浅拷…

亚信安全正式接入DeepSeek

亚信安全致力于“数据驱动、AI原生”战略&#xff0c;早在2024年5月&#xff0c;推出了“信立方”安全大模型、安全MaaS平台和一系列安全智能体&#xff0c;为网络安全运营、网络安全检测提供AI技术能力。自2024年12月DeepSeek-V3发布以来&#xff0c;亚信安全人工智能实验室利…

Flutter 的 Widget Key 提议大调整?深入聊一聊 Key 的作用

Flutter 的 Widget Key 提议大调整&#xff1f;深入聊一聊 Key 的作用 在 Flutter 里&#xff0c;Key 对象存在的目的主要是区分和维持 Widget 的状态&#xff0c;它是控件在渲染树里的「复用」标识之一&#xff0c;这一点在之前的《深入 Flutter 和 Compose 在 UI 渲染刷新时…

Vulhub靶机 openfire(CVE-2023-32315)(渗透测试详解)

一、开启vulhub环境 docker-compose up -d 启动 docker ps 查看开放的端口 二、访问靶机IP 9090端口 1、利用bp&#xff0c;抓取当前页面的包&#xff0c;并修改get请求如下 /setup/setup-s/%u002e%u002e/%u002e%u002e/user-groups.jsp 获取到JSESSIONID和csrf的值 2、拿到…

LogicFlow自定义节点:矩形、HTML(vue3)

效果&#xff1a; LogicFlow 内部是基于MVVM模式进行开发的&#xff0c;分别使用preact和mobx来处理 view 和 model&#xff0c;所以当我们自定义节点的时候&#xff0c;需要为这个节点定义view和model。 参考官方文档&#xff1a;节点 | LogicFlow 1、自定义矩形节点 custo…

python卷积神经网络人脸识别示例实现详解

目录 一、准备 1&#xff09;使用pytorch 2&#xff09;安装pytorch 3&#xff09;准备训练和测试资源 二、卷积神经网络的基本结构 三、代码实现 1&#xff09;导入库 2&#xff09;数据预处理 3&#xff09;加载数据 4&#xff09;构建一个卷积神经网络 5&#xff0…

基于Ollama安装deepseek-r1模型搭建本地知识库

大模型 安装Ollama使用win系统安装使用sh脚本安装使用docker安装 下载大模型搭建本地知识库安装Dify对比参数模型 本实验主要使用win系统安装ollama部署deepseek-r1&#xff08;1.5b、7b、8b、14b、32b等参数&#xff09;并搭建本地知识库&#xff08;个人学习研究为主&#xf…

【R语言】t检验

一、基本介绍 t检验&#xff08;t-test&#xff09;是用于比较两个样本均值是否存在显著差异的一种统计方法。 t.test()函数的调用格式&#xff1a; t.test(x, yNULL, alternativec("two.sided", "less", "greater"), mu0, pairFALSE, var.eq…

Uniapp 原生组件层级过高问题及解决方案

文章目录 一、引言&#x1f3c5;二、问题描述&#x1f4cc;三、问题原因❓四、解决方案&#x1f4af;4.1 使用 cover-view 和 cover-image4.2 使用 subNVue 子窗体4.3 动态隐藏原生组件4.4 使用 v-if 或 v-show 控制组件显示4.5 使用 position: fixed 布局 五、总结&#x1f38…

x_xor_md5

x_xor_md5 打开附件&#xff0c;用010打开 发现有一行值是重复的。 根据题目提示我们把全文与重复行进行异或 str1 [0x01,0x78,0x0C,0x4C,0x10,0x9E,0x32,0x37,0x12,0x0C,0xFB,0xBA,0xCB,0x8F,0x6A,0x53]result[]txt [0x69,0x35,0x41,0x01,0x1C,0x9E,0x75,0x78,0x5D,0x48,0xF…

【C语言标准库函数】标准输入输出函数详解[6]:字符文件读取写入

目录 一、字符文件写入函数 1.1. fputc函数 1.1.1. fputc函数简介 1.1.2. 使用场景 1.1.3. 注意事项 1.1.4. 示例 1.2. fputs函数 1.2.1. fputs函数简介 1.2.2. 使用场景 1.2.3. 注意事项 1.2.4. 示例 二、字符文件读取函数 2.1. fgetc函数 2.1.1. 函数简介 2.1…

基于深度学习的半导体故障诊断与寿命预测算法研究

摘要 半导体产业在现代科技领域占据着核心地位&#xff0c;其设备的稳定性和可靠性至关重要。传统的半导体故障诊断和寿命预测方法存在效率低、准确性差等问题。本文聚焦于深度学习算法在半导体故障诊断与寿命预测方面的应用&#xff0c;详细阐述了卷积神经网络&#xff08;CN…

制药行业 BI 可视化数据分析方案

一、行业背景 随着医药行业数字化转型的深入&#xff0c;企业积累了海量的数据&#xff0c;包括销售数据、生产数据、研发数据、市场数据等。如何利用这些数据&#xff0c;挖掘其价值&#xff0c;为企业决策提供支持&#xff0c;成为医药企业面临的重大挑战。在当今竞争激烈的…