QT调用OpenSceneGraph

OSG和osgQt编译教程,实测通过 

一、下载OpenSceneGraph

OpenSceneGraphhttps://github.com/openscenegraph/OpenSceneGraph

 二、使用CMAKE编译OpenSceneGraph

1.打开cmake,配置源代码目录

2. CMAKE_INSTALL_PREFIX设置为install文件夹,生成VS工程

3. 使用VS2022打开工程,编译ALL_BUILD和INSTALL,在OpenSceneGraph-master\install目录下生成头文件、lib文件和动态库 

三、下载osgQt

osgQthttps://github.com/openscenegraph/osgQt

四、使用CMAKE编译osgQt

1.修改osgQt-master/CMakeLists.txt,配置OSG和QT依赖(重点,不修改cmake会报错

找到以下的行,在FIND_PACKAGE(OpenSceneGraph...上面添加一行,set(CMAKE_PREFIX_PATH  "path1;paht2"),注意path1和ath2使用分号分隔,path1为上面的OSG生成目录,即OpenSceneGraph-master/install,path2为QT的安装目录,本案例为Qt/5.15.2/msvc2019_64。版本号3.7.0为OSG的版本号

如下:

PROJECT(osgQt)set(CMAKE_PREFIX_PATH "C:/Users/115627/Desktop/OpenSceneGraph-master/OpenSceneGraph-master/install;C:/Qt/5.15.2/msvc2019_64")
FIND_PACKAGE(OpenSceneGraph 3.7.0 REQUIRED osgDB osgGA osgUtil osgText osgViewer osgWidget)
SET(OPENSCENEGRAPH_SOVERSION 145)SET(OSG_PLUGINS osgPlugins-${OPENSCENEGRAPH_VERSION})SET(OSG_PLUGIN_PREFIX "")IF (CYGWIN)SET(OSG_PLUGIN_PREFIX "cygwin_")
ENDIF()IF(MINGW)SET(OSG_PLUGIN_PREFIX "mingw_")
ENDIF()

2..打开cmake,配置源代码目录

3. CMAKE_INSTALL_PREFIX设置为install文件夹,生成VS工程

4. 使用VS2022打开工程,编译ALL_BUILD和INSTALL,在install目录下生成头文件、lib文件和动态库 

 五、配置环境变量

将OSG和osgQt的动态库加入到系统环境变量,方便后续测试测序找到

六、Qt 测试程序

启动qt creator,新建测试项目,配置头文件路径, lib路径即lib文件,pro配置如下:

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++17 opengl# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.hFORMS += \widget.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += targetINCLUDEPATH += C:/Users/115627/Desktop/OpenSceneGraph-master/OpenSceneGraph-master/install/include \C:/Users/115627/Desktop/OpenSceneGraph-master/osgQt-master/install/includeCONFIG(debug,debug|release){LIBS += -LC:\Users\115627\Desktop\OpenSceneGraph-master\OpenSceneGraph-master\install\lib \-LC:\Users\115627\Desktop\OpenSceneGraph-master\osgQt-master\install\lib \-lOpenThreadsd \-losgd \-losgDBd \-losgGAd \-losgUtild \-losgViewerd \-losgQOpenGLd
}else {LIBS += -LC:\Users\115627\Desktop\OpenSceneGraph-master\OpenSceneGraph-master\install\lib \-LC:\Users\115627\Desktop\OpenSceneGraph-master\osgQt-master\install\lib \-lOpenThreads \-losg \-losgDB \-losgGA \-losgUtil \-losgViewer \-losgQOpenGL
}

 头文件:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>#include <osgQOpenGL/osgQOpenGLWidget>QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();protected slots:void initOSG();private slots:void on_pushButton_clicked();private:Ui::Widget *ui;osgQOpenGLWidget* osgWidget;
};#endif // WIDGET_H

CPP文件

#include "widget.h"
#include "ui_widget.h"
#include <osgViewer/Viewer>
#include <osg/Node>
#include <osgDB/ReadFile>
#include <osgGA/TrackballManipulator>
#include <osg/MatrixTransform>
#include <osg/ShapeDrawable>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);osgWidget = new osgQOpenGLWidget(ui->widget);          // 指定osg窗口显示位置osgWidget->setGeometry(ui->widget->geometry());        // 指定osg窗口显示大小// connect(osgWidget, SIGNAL(initialized()), this, SLOT(initOSG()));
}Widget::~Widget()
{delete ui;
}void Widget::initOSG()
{osgViewer::Viewer* pViewer = osgWidget->getOsgViewer();pViewer->setCameraManipulator(new osgGA::TrackballManipulator);auto root = new osg::Group;auto transform = new osg::MatrixTransform;osg::Cylinder* cylinder    = new osg::Cylinder( osg::Vec3( 0.f, 0.f, 0.f ), 1.f, 1.f );osg::ShapeDrawable* sd = new osg::ShapeDrawable( cylinder );sd->setColor( osg::Vec4( 0.8f, 0.5f, 0.2f, 1.f ) );osg::ref_ptr<osg::Geode> geode = new osg::Geode();geode->addDrawable(sd);pViewer->setSceneData(geode);
}void Widget::on_pushButton_clicked()
{initOSG();
}

运行结果

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES6 简单练习笔记--变量申明

一、ES5 变量定义 1.在全局作用域中 this 其实就是window对象 <script>console.log(window this) </script>输出结果: true 2.在全局作用域中用var定义一个变量其实就相当于在window上定义了一个属性 例如: var name "孙悟空" 其实就相当于执行了 win…

Java 8 实战 书籍知识点散记

一、Lambda表达式 1.1 Lambda表达式的一些基本概念 1.2 Lambda表达式的三个部分 // 简化前Comparator<Apple> byWeightnew Comparator<Apple>() {public int compare(Apple a1, Apple a2){return a1.getWeight().compareTo(a2.getWeight());}};//Lambda表达式Comp…

XCP 协议基础

文章目录 一、XCP 简介二、XCP的主要功能三、什么是标定四、什么时候进行标定五、标定的意义六、标定的三层架构XCP协议 和 CCP协议的区别参考 一、XCP 简介 XCP 协议的全称为 eXtended Calibration Protocol&#xff0c;即扩展标定协议。 另有其他定义&#xff0c;XCP 协议全…

医学图像分析工具09.1:Brainstorm安装教程

1. 安装前准备 **官方安装包和数据&#xff1a;**https://neuroimage.usc.edu/bst/download.php **官方安装教程&#xff1a;**https://neuroimage.usc.edu/brainstorm/Installation Matlab 版本要求&#xff1a; 有 Matlab&#xff1a; R2009b (7.9) 或更高版本没有 Matlab&…

python创建一个httpServer网页上传文件到httpServer

一、代码 1.server.py import os from http.server import SimpleHTTPRequestHandler, HTTPServer import cgi # 自定义请求处理类 class MyRequestHandler(SimpleHTTPRequestHandler):# 处理GET请求def do_GET(self):if self.path /:# 响应200状态码self.send_response(2…

vue3搭建实战项目笔记

vue3搭建实战项目笔记 搭建项目笔记1.1.创建Vue项目1.2.划分目录结构assets -> 资源&#xff08;css/font/img&#xff09;components -> 抽取出来的公共组件hooks -> 组件对应的公共逻辑抽取到hooks文件夹下router -> 路由mock -> 模拟数据的一些配置service -…

OneData体系架构详解

阿里巴巴的 OneData 体系架构方法论&#xff0c;主要分为三个阶段&#xff1a;业务板块、规范定义 和 模型设计。每个阶段的核心目标是确保数据的高效管理、共享与分析能力。 一. 业务板块&#xff08;Business Segment&#xff09; 业务板块是OneData体系架构中的第一步&…

[Computer Vision]实验三:图像拼接

目录 一、实验内容 二、实验过程及结果 2.1 单应性变换 2.2 RANSAC算法 三、实验小结 一、实验内容 理解单应性变换中各种变换的原理&#xff08;自由度&#xff09;&#xff0c;并实现图像平移、旋转、仿射变换等操作&#xff0c;输出对应的单应性矩阵。利用RANSAC算法优…

在 vscode + cmake + GNU 工具链的基础上配置 JLINK

安装 JLINK JLINK 官网链接 下载安装后找到安装路径下的可执行文件 将此路径添加到环境变量的 Path 中。 创建 JFlash 项目 打开 JFlash&#xff0c;选择新建项目 选择单片机型号 在弹出的窗口中搜索单片机 其他参数根据实际情况填写 新建完成&#xff1a; 接下来设置…

ue5 GAS制作一个技能

新建文件夹 ability 取名BP_BaseAbility 新建一个技能GAB_Melee 上面技能GAB_Melee和技能基类BP_BaseAbility 进入技能GAB_Melee&#xff0c;添加打印火云掌 给这个技能添加标签 点这个号 这样命名&#xff0c;小心这个点&#xff08;.&#xff09;作为分割 ability.ha…

小米Vela操作系统开源:AIoT时代的全新引擎

小米近日正式开源了其物联网嵌入式软件平台——Vela操作系统&#xff0c;并将其命名为OpenVela。这一举动在AIoT&#xff08;人工智能物联网&#xff09;领域掀起了不小的波澜&#xff0c;也为开发者们提供了一个强大的AI代码生成器和开发平台。OpenVela项目源代码已托管至GitH…

opentelemetry-collector docker安装

一、编写配置 nano /root/otelcol-config.yamlreceivers:otlp:protocols:grpc:endpoint: 0.0.0.0:4317http:endpoint: 0.0.0.0:4318 exporters:debug:verbosity: detailed service:pipelines:traces:receivers: [otlp]exporters: [debug]metrics:receivers: [otlp]exporters: …

Arweave的出块原理

一、Arweave 关键技术 1.1数据结构&#xff1a;Blockweave 区块纺 区块坊中包括区块哈希列表和钱包列表。拥有区块哈希列表使旧区块可以被请求/验证&#xff0c;拥有钱包列表可以验证新交易&#xff0c;而无需处理钱包上一次交易所在的区块。区块哈希列表和钱包列表由矿工保持…

寒假刷题记录

4968. 互质数的个数 - AcWing题库 涉及&#xff1a;快速幂&#xff0c;欧拉函数&#xff0c;分解质因数 #include <bits/stdc.h> #define fi first #define se second #define endl \n #define pb push_backusing namespace std; using LL long long;const int mod 9…

免费下载 | 2024中国智算中心产业发展白皮书

以下是《2024中国智算中心产业发展白皮书》的核心内容整理&#xff1a; 一、智算中心产业发展背景及内涵 背景&#xff1a;智算中心作为新型基础设施&#xff0c;是数字经济的重要支撑&#xff0c;随着人工智能技术的快速发展&#xff0c;智算中心的需求日益增长。 内涵&#…

爬虫基础之爬取某站视频

目标网址:为了1/4螺口买小米SU7&#xff0c;开了一个月&#xff0c;它值吗&#xff1f;_哔哩哔哩_bilibili 本案例所使用到的模块 requests (发送HTTP请求)subprocess(执行系统命令)re (正则表达式操作)json (处理JSON数据) 需求分析: 视频的名称 F12 打开开发者工具 or 右击…

软件测试入门—用例设计中的场景图和状态迁移图

在软件测试领域&#xff0c;用例设计是一项至关重要的工作&#xff0c;它直接关系到软件质量的高低。而场景图和状态迁移图作为用例设计中的两种有效工具&#xff0c;能够帮助测试人员更全面、系统地设计测试用例。下面我们就来深入了解一下这两种图。 一、场景图 场景图主要…

Java面试专题——面向对象

面向过程和面向对象的区别 面向过程&#xff1a;当事件比较简单的时候&#xff0c;利用面向过程&#xff0c;注重的是事件的具体的步骤/过程&#xff0c;注重的是过程中的具体的行为&#xff0c;以函数为最小单位&#xff0c;考虑怎么做。 面向对象&#xff1a;注重找“参与者…

软件测试—— 接口测试(HTTP和HTTPS)

软件测试—— 接口测试&#xff08;HTTP和HTTPS&#xff09; HTTP请求方法GET特点使用场景URL结构URL组成部分URL编码总结 POST特点使用场景请求结构示例 请求标头和响应标头请求标头&#xff08;Request Headers&#xff09;示例请求标头 响应标头&#xff08;Response Header…

顺序表和链表(详解)

线性表 线性表&#xff08; linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线。…