当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/535548.html

相关文章:

  • 本地部署【LLM-deepseek】大模型 ollama+deepseek/conda(python)+openwebui/docker+openwebui
  • 网络分析工具—WireShark的安装及使用
  • MobaXterm的图形化界面支持:原理与分辨率问题解决
  • Java JVM(Java Virtual Machine)解析
  • pytest测试专题 - 1.2 如何获得美观的测试报告
  • 现阶段股指期货交易保证金和费用多少?股指期货一手多少钱?
  • 使用mermaid画流程图
  • 大模型笔记:pytorch实现MOE
  • HAL库USART中断接收的相关问题
  • @Transational事务注解底层原理以及什么场景事务会失效
  • Linux扩容磁盘
  • 全面解析鸿蒙(HarmonyOS)开发:从入门到实战,构建万物互联新时代
  • Uniapp 原生组件层级过高问题及解决方案
  • Android adb测试常用命令大全
  • linux的基础入门2
  • 19.4.8 数据库综合运用
  • JAVA中的抽象学习
  • 在 Go 中实现事件溯源:构建高效且可扩展的系统
  • 加解密 | AES加、解密学习
  • 【学术投稿-2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025)】CSS样式解析:行内、内部与外部样式的区别与优先级分析
  • MongoDB 基本操作
  • Eclipse JSP/Servlet 深入解析
  • Hyperledger caliper 性能测试
  • Record-Mode 备案免关站插件,让 WordPress 备案不影响 SEO 和收录
  • 【Java 面试 八股文】Redis篇
  • 介绍几款免费的显示器辅助工具!
  • django配置跨域
  • web前端第三次作业
  • 【Pandas】pandas Series align
  • DeepSeek-V3网络模型架构图解