ZBLOG

Qt中创建一个3D场景控件?

在Qt中创建一个3D场景控件可以按照以下步骤操作:

  1. 在Qt Creator中,创建一个新的Qt 3D应用程序项目。

  2. 添加一个QWidget对象到主窗口(或其他QWidget)中。在设计模式下,从左侧的“Widget Box”面板拖动QWidget控件并放置到主窗口中。

  3. 在代码中包含必要的头文件:

#include <Qt3DCore/QEntity>
#include <Qt3DExtras/Qt3DWindow>
#include <Qt3DExtras/QForwardRenderer>
#include <Qt3DExtras/QOrbitCameraController>
#include <Qt3DRender/QCamera>
  1. 创建一个QT 3D视图,并将其设置为QWidget对象的子控件。例如:
// 创建 Qt 3D 视图
Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow();
view->defaultFrameGraph()->setClearColor(QColor(QRgb(0x4d4d4f)));
ui->widget_2->layout()->addWidget(QWidget::createWindowContainer(view));

这里我们创建了一个默认帧图形(frame graph),设置其背景色为灰色,并将它添加到QWidget对象的布局管理器中。

  1. 创建QT 3D场景和实体。例如:
// 创建场景根节点
Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();

// 创建立方体实体
auto cube = new Qt3DExtras::QCuboidMesh();
cube->setXExtent(1);
cube->setYExtent(1);
cube->setZExtent(1);

// 创建材质
auto material = new Qt3DExtras::QPhongMaterial();
material->setDiffuse(QColor(QRgb(0xbeb32b)));

// 创建立方体实例并设置位置、旋转和缩放
auto cubeTransform = new Qt3DCore::QTransform();
cubeTransform->setScale(2.0f);
cubeTransform->setTranslation(QVector3D(0.0f, 0.0f, -5.0f));
cubeTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1.0f, 1.0f, 1.0f), 45.0f));

// 将立方体实体与材质和变换关联起来
auto cubeEntity = new Qt3DCore::QEntity(rootEntity);
cubeEntity->addComponent(cube);
cubeEntity->addComponent(material);
cubeEntity->addComponent(cubeTransform);

// 设置场景根节点为视图的默认根节点,并启动渲染器
view->setRootEntity(rootEntity);

这里我们创建了一个场景根节点,以及一个立方体实体、一个材质和一个变换。我们将立方体实体与材质和变换组件关联起来,然后将其添加到场景根节点中。

  1. 创建QT 3D相机并设置其位置和焦点。例如:
auto camera = view->camera();

camera->lens()->setPerspectiveProjection(45.f, qreal(view->width()) / qreal(view->height()), 0.1f, 100.f);
camera->setPosition(QVector3D(4.0f, 4.0f, 4.0f));
camera->setViewCenter(QVector3D(0.0f, 0.0f, 0.0f));

这里我们创建了一个相机,设置其透视投影和位置,并将其焦点设为场景的中心。

  1. 创建QT 3D轨道摄像机控制器,使用户可以通过鼠标或键盘控制相机的旋转和缩放。例如:
// 创建轨道摄像机控制器
auto camController = new Qt3DExtras::QOrbitCameraController(rootEntity);
camController->setCamera(camera);

// 添加摄像机控制器到场景根节点
rootEntity->addComponent(camController);

这里我们创建了一个轨道摄像机控制器,并将其关联到相机上。然后,将该控制器添加到场景根节点中。

  1. 编译运行程序,在窗口或界面上显示相应的3D场景控件,并测试其功能。用户可以使用该控件方便地查看、操作三维模型或场景,通过编程来改变它们的属性和外观等。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6574

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?