OSG入门教程08.03:与Qt集成

分析

先打开osg库的头文件目录

头文件目录

可以看到有个osgQOpenGL,也就是说osg集成了QOpenGLWidget相关类。

pro

创建一个QWidget工程,修改工程文件

1
2
3
INCLUDEPATH += $$PWD/osg/include
LIBS += -L$$PWD/osg/lib -losgd -losgViewerd -losgUtild -losgDBd -losgQOpenGLd \
-losgGAd

声明

在widget.h中添加声明和定义

1
2
3
4
5
6
7
#include "osgQOpenGL/osgQOpenGLWidget"

protected slots:
void initWindow();

protected:
osgQOpenGLWidget *m_pOSGQOpenGLWidget;

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<osgViewer/Viewer>
#include<osg/Node>
#include<osg/Group>
#include<osgDB/ReadFile>
#include<osgDB/WriteFile>
#include<osgUtil/Optimizer>
#include <osg/Node>
#include <osgViewer/Viewer>
#include <osg/Geode>
#include <osg/Group>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osgUtil/Optimizer>
#include <osgGA/TrackballManipulator> /// osgGA::TrackballManipulator
#include <osgViewer/ViewerEventHandlers> /// osgViewer::StatsHandler
#include <osg/MatrixTransform> /// osg::Transform
#include <osg/BoundingSphere> /// osg::BoundingSphere::bound()
#include <osg/ShapeDrawable> /// osg::ShapeDrawable
#include <osg/LineWidth>
#include <osg/BlendColor> /// osg::BlendColor
#include <osg/BlendFunc> /// osg::BlendFunc


Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);

m_pOSGQOpenGLWidget = new osgQOpenGLWidget(this);
m_pOSGQOpenGLWidget->setGeometry(geometry());

connect(m_pOSGQOpenGLWidget,&osgQOpenGLWidget::initialized,this,&Widget::initWindow);
}

Widget::~Widget()
{
if(m_pOSGQOpenGLWidget){
m_pOSGQOpenGLWidget->deleteLater();
}
delete ui;
}

void Widget::initWindow()
{
osgViewer::Viewer* pViewer = m_pOSGQOpenGLWidget->getOsgViewer();
pViewer->setCameraManipulator(new osgGA::TrackballManipulator);
osg::Node* node = osgDB::readNodeFile("cow.osg");
pViewer->setSceneData(node);
}

模型部分和上一篇的代码类似。

还是一样的将dll和模型复制到程序目录。

运行效果

加载模型

ObjectXXX OSG 库依赖Qt 6.x,我使用的是Qt6.4.3

尽量版本匹配,不要用Qt5创建工程链接Qt6的库,可能会出问题。可以使用基于Qt5.14.2版本的库


OSG入门教程08.03:与Qt集成
https://blog.jackeylea.com/osg/integrate-osg-framework-to-qt/
作者
JackeyLea
发布于
2024年3月10日
许可协议