Qt 集成OSG

2024-04-23 15:20
文章标签 qt 集成 osg

本文主要是介绍Qt 集成OSG,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Qt 你好 | 专注于Qt的技术分享平台

一,新建一个 QOsgWidget 类,继承自osgQOpenGLWidget

#ifndef QOSGWIDGET_H
#define QOSGWIDGET_H#include <QObject>
#include <osgViewer/Viewer>
#include <osgQOpenGL/osgQOpenGLWidget>
class QOsgWidget: public osgQOpenGLWidget
{public:explicit QOsgWidget(QWidget *parent = nullptr);QSize sizeHint() const;void InitQOsgWidget();};#endif // QOSGWIDGET_H
#include "qosgwidget.h"
#include <QDebug>
QOsgWidget::QOsgWidget(QWidget *parent):osgQOpenGLWidget(parent)
{//多重采样QSurfaceFormat surfaceFormat;surfaceFormat.setSamples(6);setFormat(surfaceFormat);
}QSize QOsgWidget::sizeHint() const
{return QSize(this->width(),this->height());
}

二,UI中创建一个QWidget 并提升为QOsgWidget

三,主窗初始化这个QOsgWidget。 这里以一个 网格 节点为例。

#ifndef WIDGET_H
#define WIDGET_H#include <osg/Node>
#include <QWidget>
#include "qosgwidget.h"QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;void InitQOsgWidget();osg::ref_ptr<osg::Group> _Root = nullptr;osg::ref_ptr<osgViewer::Viewer> _Viewer = nullptr;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"#include <osgGA/TrackballManipulator>
#include <osgUtil/Optimizer>
#include <osgGA/GUIEventHandler>
#include <osgViewer/ViewerEventHandlers>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->widget, &osgQOpenGLWidget::initialized, this, &Widget::InitQOsgWidget);
}Widget::~Widget()
{delete ui;
}void Widget::InitQOsgWidget()
{_Root = new osg::Group();QSize size = ui->widget->size();osg::ref_ptr<osgGA::TrackballManipulator> trackball = new osgGA::TrackballManipulator;trackball->setAllowThrow(false);trackball->setAutoComputeHomePosition(true);trackball->setThreadSafeRefUnref(true);osgUtil::Optimizer optimizer;optimizer.optimize(_Root.get());_Viewer = ui->widget->getOsgViewer();_Viewer->addEventHandler(new osgViewer::StatsHandler);_Viewer->getCamera()->setClearColor(osg::Vec4(0.2, 0.2, 0.2, 1));_Viewer->getCamera()->setProjectionMatrixAsPerspective(30.0f, static_cast<double>(size.width())/static_cast<double>(size.height()), 1.0f, 10000.0f );_Viewer->setCameraManipulator(trackball);_Viewer->setRunMaxFrameRate(60);osg::ref_ptr<osg::Geode> grid = new osg::Geode;osg::Geometry* geom = new osg::Geometry;grid->addChild(geom);osg::Vec3Array* vertex = new osg::Vec3Array;geom->setVertexArray(vertex);//沿xy平面画线,间隔500米,从-10000,画到100000for (int i = -10; i <= 10; i += 1){vertex->push_back(osg::Vec3(i, -10, 0));vertex->push_back(osg::Vec3(i, 10, 0));vertex->push_back(osg::Vec3(-10, i, 0));vertex->push_back(osg::Vec3(10, i, 0));}geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINES, 0, vertex->size()));osg::Vec4Array* color = new osg::Vec4Array();color->push_back(osg::Vec4(0.7, 0.7, 0.7, 1.0));geom->setColorArray(color, osg::Array::BIND_OVERALL);geom->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);_Root->addChild(grid);_Viewer->setSceneData(_Root.get());
}

四,效果

集成OSG | Qt 你好

这篇关于Qt 集成OSG的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/929165

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

【Shiro】Shiro 的学习教程(三)之 SpringBoot 集成 Shiro

目录 1、环境准备2、引入 Shiro3、实现认证、退出3.1、使用死数据实现3.2、引入数据库,添加注册功能后端代码前端代码 3.3、MD5、Salt 的认证流程 4.、实现授权4.1、基于角色授权4.2、基于资源授权 5、引入缓存5.1、EhCache 实现缓存5.2、集成 Redis 实现 Shiro 缓存 1、环境准备 新建一个 SpringBoot 工程,引入依赖:

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

系统架构师-ERP+集成

ERP   集成平台end:就懒得画新的页

Spring Boot集成Tess4J实现OCR

1.什么是Tess4j? Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。Tess4J是一个基于Tesseract OCR引擎的Java接口,可以用来识别图像中的文本,说白了,就是封装了它的API,让Java可以直接调用。 Tess

使用Qt编程QtNetwork无法使用

使用 VS 构建 Qt 项目时 QtNetwork 无法使用的问题 - 摘叶飞镖 - 博客园 (cnblogs.com) 另外,强烈建议在使用QNetworkAccessManager之前看看这篇文章: Qt 之 QNetworkAccessManager踏坑记录-CSDN博客 C++ Qt开发:QNetworkAccessManager网络接口组件 阅读目录 1.1 通用API函数

使用Spring Boot集成Spring Data JPA和单例模式构建库存管理系统

引言 在企业级应用开发中,数据库操作是非常重要的一环。Spring Data JPA提供了一种简化的方式来进行数据库交互,它使得开发者无需编写复杂的JPA代码就可以完成常见的CRUD操作。此外,设计模式如单例模式可以帮助我们更好地管理和控制对象的创建过程,从而提高系统的性能和可维护性。本文将展示如何结合Spring Boot、Spring Data JPA以及单例模式来构建一个基本的库存管理系统

Qt多语种开发教程

Qt作为跨平台的开发工具,早已应用到各行各业的软件开发中。 今天讲讲,Qt开发的正序怎么做多语言开发。就是说,你设置中文,就中文显示;设置英语就英文显示,设置繁体就繁体显示,设置发育就显示法语等。 开发环境(其实多语种这块根环境没太大关系):win10,Qt.5.12.10 一.先用QtCreator创建一个简单的桌面程序 1.工程就随便命名“LanguageTest”,其他默认。 2.在设计师