QT调用OpenSceneGraph

news2025/1/22 11:02:32

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 gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += 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.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target


INCLUDEPATH += C:/Users/115627/Desktop/OpenSceneGraph-master/OpenSceneGraph-master/install/include \
                C:/Users/115627/Desktop/OpenSceneGraph-master/osgQt-master/install/include



CONFIG(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_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    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.coloradmin.cn/o/2280322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git 详细安装教程以及gitlab添加SSH密钥

目录 一、下载安装 二、gitlab添加SSH密钥 一、下载安装 &#xff08;1&#xff09;去官网下载 找到下载的安装包双击进行安装。 &#xff08;2&#xff09;使用许可声明 双击下载后的 Git-2.47.1.2-64-bit.exe&#xff0c;开始安装&#xff0c;这个界面主要展示了 GPL 第…

【优选算法】4----盛最多水的容器

开始有点上强度了铁子们&#xff0c;这道算法题也是可以说很难理解的~ 想了好久才想明白~ ---------------------------------------begin--------------------------------------- 题目解析&#xff1a; 这一道题刚看题目&#xff0c;根本不知道在讲啥&#xff0c;但看到体积…

今天也是记录小程序进展的一天(破晓时8)

嗨嗨嗨朋友们&#xff0c;今天又来记录一下小程序的进展啦&#xff01;真是太激动了&#xff0c;项目又迈出了重要的一步&#xff0c;231啦&#xff01;感觉每一步的努力都在积累&#xff0c;功能逐渐完善&#xff0c;离最终上线的目标越来越近了。大家一直支持着这个项目&…

Python保留字与标识符及常变量

1、保留字 保留字&#xff1b;严格区分大小写 不可以把保留字作为变量、函数、类、模块和其他对象的名称来使用 import keyword print(keyword.kwlist) # 输出所有的保留字 print(len(keyword.kwlist)) # 获取保留字的个数 true 真 # True 真 #属于保留字&#xff0c;会…

若依报错:无法访问com.ruoyi.common.annotation

无法访问com.ruoyi.common.annotation 若依的父工程的pom文件中设置了jdk为1.8&#xff0c;将idea的jdk也改为1.8即可。

2008-2020年各省城镇登记失业率数据

2008-2020年各省城镇登记失业率数据 1、时间&#xff1a;2008-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、城镇登记失业率 4、范围&#xff1a;31省 5、指标说明&#xff1a;城镇登记失业率是指在一定时期内&…

Linux——入门基本指令汇总

目录 1. ls指令2. pwd3. whoami指令4. cd指令5. clear指令6. touch指令7. mkdir指令8. rm指令9. man指令10. cp指令11. mv指令12. cat指令13. tac指令14. more指令15. less指令16. head指令17. tail指令18. date指令19. cal指令20. find指令21. which指令22. alias指令23. grep…

【知识分享】PCIe5.0 TxRx 电气设计参数汇总

目录 0 引言 1 参考时钟--Refclk 2 发射端通道设计 3 发送均衡技术 4 接收端通道设计 5 接收均衡技术 6 结语 7 参考文献 8 扩展阅读 0 引言 PCI Express Base Specification 5.0的电气规范中&#xff0c;关键技术要点如下&#xff1a; 1. 支持2.5、5.0、8.0、16.0和3…

npm install安装缓慢或卡住不动

起因 今天执行npm install eslint-plugin-cypresslatest --save-dev命令时进度条一直卡着不动&#xff0c;于是想着安装yarn来操作。 方案1 全局安装yarn&#xff08;Mac在npm前加sudo&#xff09;&#xff1a; npm install -g yarn yarn安装好之后安装依赖用&#xff1a; y…

SparkSQL函数综合实践

文章目录 1. 实战概述2. 实战步骤2.1 创建项目2.2 添加依赖2.3 设置源目录2.4 创建日志属性文件2.5 创建hive配置文件2.6 创建数据分析对象2.6.1 导入相关类2.6.2 创建获取Spark会话方法2.6.3 创建表方法2.6.4 准备数据文件2.6.5 创建加载数据方法2.6.6 创建薪水排行榜方法2.6.…

Linux第103步_了解I2C总线框架

了解Linux中的I2C总线框架为后面做I2C实验做准备&#xff0c;学驱动&#xff0c;就是学习框架&#xff0c;了解是必须的。 1、了解Linux下的I2C子系统中的相关数据结构 struct i2c_adapter { struct module *owner; unsigned int class; /* classes to allow probing for …

开关电源基础

文章目录 线性电源与开关电源选用 开关稳压器脉宽调制简化的降压开关电源 开关电源类型输出电压分拓扑分 控制器与稳压器效率与 V o u t V_{out} Vout​ 同步与非同步隔离与非隔离非隔离式拓扑结构隔离式拓扑结构 线性电源与开关电源 线性稳压器就是我们通常说的LDO: 传输元件…

1. 基于图像的三维重建

1. 基于图像的三维重建 核心概念三维重建中深度图、点云的区别&#xff1f;深度图点云总结 深度图到点云还需要什么步骤&#xff1f;1. **获取相机内参**2. **生成相应的像素坐标**3. **计算三维坐标**4. **构建点云**5. **处理颜色信息&#xff08;可选&#xff09;**6. **去除…

智慧脚下生根,智能井盖监测终端引领城市安全新革命

在繁忙的都市生活中&#xff0c;我们往往只关注地面的繁华与喧嚣&#xff0c;却忽略了隐藏在地面之下的基础设施——井盖。这些看似不起眼的井盖&#xff0c;实则承担着排水、通讯、电力等重要功能&#xff0c;是城市安全运转的重要一环。然而&#xff0c;传统的井盖管理面临着…

62,【2】 BUUCTF WEB [强网杯 2019]Upload1

进入靶场 此处考点不是SQL&#xff0c;就正常注册并登录进去 先随便传一个 进行目录扫描&#xff0c;我先用爆破代替 先随便后面写个文件名 为了提供payload位置 www.tar.gz真的存在 返回浏览器修改url就自动下载了 看到tp5,应该是ThinkPHP5框架 参考此博客的思路方法c[强网杯…

IDEA导入Maven工程不识别pom.xml

0 现象 把阿里 sentinel 项目下载本地后&#xff0c;IDEA 中却没显示 maven 工具栏。 1 右键Maven Projects 点击IDEA右侧边栏的Maven Projects&#xff0c;再点击&#xff1a; 在出现的选择框中选择指定的未被识别的pom.xml即可&#xff1a; 2 Add as maven project 右键p…

LDD3学习9--数据类型和定时器

这部分对应的是第七章和第十一章&#xff0c;因为内容也不是很多&#xff0c;就一起写了。里面的内容基本上就是一个个的点&#xff0c;所以也就一个个点简单总结一下。 1 数据类型 1.1 数据长度 不同操作系统类型长度可能不一样&#xff0c;看图的话最好用u8&#xff0c;u16&…

latex去掉bibliography自带的reference

latex要去掉bibliography自带的reference其实很简单&#xff0c; 只需要加以下命令&#xff1a; \begingroup % 去掉thebibliography环境自带的“参考文献”标题 \renewcommand{\section}[2]{} 即可。 效果如图

AI在SEO中的关键词优化策略探讨

内容概要 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正逐渐重塑搜索引擎优化&#xff08;SEO&#xff09;行业。AI技术的快速发展使得SEO策略发生了翻天覆地的变化&#xff0c;特别是在关键词优化方面。关键词优化的基本概念是通过选择与用户搜索意图密…

Windows 上安装 MongoDB 的 zip 包

博主介绍&#xff1a; 大家好&#xff0c;我是想成为Super的Yuperman&#xff0c;互联网宇宙厂经验&#xff0c;17年医疗健康行业的码拉松奔跑者&#xff0c;曾担任技术专家、架构师、研发总监负责和主导多个应用架构。 近期专注&#xff1a; RPA应用研究&#xff0c;主流厂商产…