首页 > 其他 > 详细

QT 中Widgets-Scene3d例子学习

时间:2019-03-18 14:18:20      阅读:209      评论:0      收藏:0      [点我收藏+]

QT中自带的例子widgets-scene3d实现在基于Widget的应用程序中使用qml 3d场景的功能,我在此基础上,将basicshapes-cpp的例子加以嵌入:

技术分享图片

相关代码如下:

 C++ Code 
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
 
#include <QApplication>
#include <QMainWindow>
#include <QQuickWidget>
#include <QMdiArea>
#include <QLCDNumber>
#include <QMenuBar>
#include "scenemodifier.h"
#include <Qt3DRender/qcamera.h>
#include <Qt3DCore/qentity.h>
#include <Qt3DRender/qcameralens.h>
#include <Qt3DInput/QInputAspect>

#include <Qt3DExtras/qtorusmesh.h>
#include <Qt3DRender/qmesh.h>
#include <Qt3DRender/qtechnique.h>
#include <Qt3DRender/qmaterial.h>
#include <Qt3DRender/qeffect.h>
#include <Qt3DRender/qtexture.h>
#include <Qt3DRender/qrenderpass.h>
#include <Qt3DRender/qsceneloader.h>
#include <Qt3DRender/qpointlight.h>

#include <Qt3DCore/qtransform.h>
#include <Qt3DCore/qaspectengine.h>

#include <Qt3DRender/qrenderaspect.h>
#include <Qt3DExtras/qforwardrenderer.h>

#include <Qt3DExtras/qt3dwindow.h>
#include <Qt3DExtras/qfirstpersoncameracontroller.h>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QMainWindow mainWindow;

    QMdiArea *centralWidget = 
new QMdiArea;
    
// 子窗口1
    QLCDNumber *lcd = new QLCDNumber;
    lcd->display(
1337);
    lcd->setMinimumSize(
250100);
    centralWidget->addSubWindow(lcd);
    
// 子窗口2
    QQuickWidget *quickWidget = new QQuickWidget;
    quickWidget->setMinimumSize(
300300);
    quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
    quickWidget->setSource(QUrl(
"qrc:/main.qml"));
    centralWidget->addSubWindow(quickWidget);
    
// 子窗口3
    Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow();
    view->defaultFrameGraph()->setClearColor(QColor(QRgb(0x4d4d4f)));
    QWidget *container = QWidget::createWindowContainer(view);
    container->setMinimumSize(
400400);
    centralWidget->addSubWindow(container);

    Qt3DInput::QInputAspect *input = 
new Qt3DInput::QInputAspect;
    view->registerAspect(input);

    
// Root entity
    Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();
    
// Camera
    Qt3DRender::QCamera *cameraEntity = view->camera();
    cameraEntity->lens()->setPerspectiveProjection(
45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
    cameraEntity->setPosition(QVector3D(
0020.0f));
    cameraEntity->setUpVector(QVector3D(
010));
    cameraEntity->setViewCenter(QVector3D(
000));

    Qt3DCore::QEntity *lightEntity = 
new Qt3DCore::QEntity(rootEntity);
    Qt3DRender::QPointLight *light = 
new Qt3DRender::QPointLight(lightEntity);
    light->setColor(
"white");
    light->setIntensity(
1);
    lightEntity->addComponent(light);
    Qt3DCore::QTransform *lightTransform = 
new Qt3DCore::QTransform(lightEntity);
    lightTransform->setTranslation(cameraEntity->position());
    lightEntity->addComponent(lightTransform);

    
// For camera controls
    Qt3DExtras::QFirstPersonCameraController *camController = new Qt3DExtras::QFirstPersonCameraController(rootEntity);
    camController->setCamera(cameraEntity);
    
// Scenemodifier
    SceneModifier *modifier = new SceneModifier(rootEntity);

    
// Set root object of the scene
    view->setRootEntity(rootEntity);



    mainWindow.setCentralWidget(centralWidget);

    QMenu *fileMenu = mainWindow.menuBar()->addMenu(QObject::tr(
"&File"));
    fileMenu->addAction(QObject::tr(
"E&xit"), qApp, &QCoreApplication::quit);

    mainWindow.resize(
1024768);
    mainWindow.show();

    
return app.exec();
}

 

QT 中Widgets-Scene3d例子学习

原文:https://www.cnblogs.com/MakeView660/p/10551637.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!