osgQt使用(osgQOpenGL版本)OSG3.6.5 VS2019 Qt5.15.2 CMAKE3.24

 

Qt5.15.2新建QWidget工程

QT新建的去qmake工程的.pro文件设置

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# 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

Osg_qt          =  G:/osgENV/osgQt
INCLUDEPATH     += $${Osg_qt}/include \
    G:/osgENV/osg365Vs2019x64/osg365/include
CONFIG(debug, debug|release){
    LIBS += $${Osg_qt}/lib/osgQOpenGLd.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/osgd.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/osgViewerd.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/osgDBd.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/osgUtild.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/OpenThreadsd.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/osgGAd.lib \
}else
{
    LIBS += $${Osg_qt}/lib/osgQOpenGL.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/osg.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/osgViewer.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/osgDB.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/osgUtil.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/OpenThreads.lib \
        G:/osgENV/osg365Vs2019x64/osg365/lib/osgGA.lib \
}

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

widget.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <osgQOpenGL/osgQOpenGLWidget>
#include <osgGA/TrackballManipulator>
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osg/Texture2D>


class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private:
    osgQOpenGLWidget* _pOsgWidget;
    osg::ref_ptr<osgViewer::Viewer> _viewer;

signals:
private slots:
void initOsg();
void initOsgWindow();
};
#endif // WIDGET_H

widget.cpp文件

#include "widget.h"
#include <QHBoxLayout>
#include <osgDB/ReadFile>
#include <osgDB/Options>
#include <osgUtil/Optimizer>
using namespace osgDB;
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
//    //方式一
//    resize(800, 600);
//    QHBoxLayout *pLayout = new QHBoxLayout(this);
//    pLayout->setMargin(0);
//    osgQOpenGLWidget *pOsgW = new osgQOpenGLWidget;
//    pLayout->addWidget(pOsgW);
//    connect(pOsgW, SIGNAL(initialized()), this, SLOT(initOsg()));
    //方式二
    _pOsgWidget = new osgQOpenGLWidget(this);
    connect(_pOsgWidget, SIGNAL(initialized()), this, SLOT(initOsgWindow()));
    QHBoxLayout * layout = new QHBoxLayout;
    setLayout(layout);
    layout->addWidget(_pOsgWidget);
}

Widget::~Widget()
{
}

void Widget::initOsg()
{
    osgViewer::Viewer *pViewer = ((osgQOpenGLWidget *)sender())->getOsgViewer();
    pViewer->setCameraManipulator(new osgGA::TrackballManipulator());
    osg::Node *pNode = osgDB::readNodeFile("G:/osgENV/OpenSceneGraph_Data/cow.osg");
    osgUtil::Optimizer optimizer;
    optimizer.optimize(pNode);
    pViewer->setSceneData(pNode);
}
void Widget::initOsgWindow()
{
    _viewer = _pOsgWidget->getOsgViewer();
    _viewer->getCamera()->setClearMask(GL_DEPTH_BUFFER_BIT);
    _viewer->setCameraManipulator(new osgGA::TrackballManipulator);
    auto *option =  new osgDB::Options("noTriStripPolygons");
    Registry::instance()->setOptions(option);
    _viewer->setSceneData(osgDB::readNodeFile("G:/osgENV/OpenSceneGraph_Data/cow.osg"));
}

main.cpp文件

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

 

posted @ 2023-01-03 15:35  羊大葱  阅读(1290)  评论(0编辑  收藏  举报