Qt 3D c++ :代码汇总
Posted leocc325
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt 3D c++ :代码汇总相关的知识,希望对你有一定的参考价值。
.pro SOURCES += main.cpp mymodel.cpp QT += 3dcore 3drender 3dinput 3dextras 3dlogic 3danimation QT += widgets HEADERS += mymodel.h
mymodel.h #ifndef MYMODEL_H #define MYMODEL_H #include <QObject> #include<QEntity> #include<QTorusMesh> #include<QTransform> #include<QPhongMaterial> class MyModel : public QObject { Q_OBJECT public: explicit MyModel(Qt3DCore::QEntity *rootEntity); ~MyModel(); private: Qt3DCore::QEntity *m_rootEntity; Qt3DExtras::QTorusMesh *m_torus; Qt3DCore::QEntity *m_torusEntity; public slots: void enableTorus(bool enabled); }; #endif // MYMODEL_H
main.cpp #include <QWidget> #include <QApplication> #include <Qt3DWindow> #include <QForwardRenderer> #include <QScreen> #include <QHBoxLayout> #include <QVBoxLayout> #include <QInputAspect> #include <QCamera> #include <QPointLight> #include <QFirstPersonCameraController> #include <QEntity> #include "mymodel.h" int main(int argc, char *argv[]) { //QCoreApplication a(argc, argv); QApplication a(argc, argv); QWidget *widget = new QWidget; Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow(); view->defaultFrameGraph()->setClearColor(QColor(QRgb(0x81fdff))); //创建画布 QWidget *container = QWidget::createWindowContainer(view); QSize screenSize = view->screen()->size(); container->setMinimumSize(QSize(200, 100)); container->setMaximumSize(screenSize); //创建画布的容器,并将画布作为参数放进容器 QWidget *container = QWidget::createWindowContainer(view); QHBoxLayout *hLayout = new QHBoxLayout(widget); QVBoxLayout *vLayout = new QVBoxLayout(); vLayout->setAlignment(Qt::AlignTop); hLayout->addWidget(container, 1); hLayout->addLayout(vLayout); //将画布的容器container放到窗口对象widget中,并添加布局 //至此 画布添加完毕 Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity(); //创建Entity对象,这个Entity将会包含相机参数,光线参数,以及3D模型,最后显示的就是这个rootEntity,Mymodel类的对象也是rootEntity的参数 Qt3DRender::QCamera *cameraEntity = view->camera(); //创建相机,必须要有相机才能看到3D对象 cameraEntity->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f); cameraEntity->setPosition(QVector3D(0, 0, 20.0f)); cameraEntity->setUpVector(QVector3D(0, 1, 0)); cameraEntity->setViewCenter(QVector3D(0, 0, 0)); //设置相机参数 Qt3DInput::QInputAspect *input = new Qt3DInput::QInputAspect; view->registerAspect(input); //QInputAspect负责创建物理设备并处理相关的作业,处理前端和后端节点之间的映射,负责根据当前输入设置建立要在特定时间运行的作业的对象。 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); //设置光源 Qt3DExtras::QFirstPersonCameraController *camController = new Qt3DExtras::QFirstPersonCameraController(rootEntity); camController->setCamera(cameraEntity); //相机第一人称视角控制 MyModel *mymodel = new MyModel(rootEntity); //创建3D对象 view->setRootEntity(rootEntity); //将3D物体添加到画布上显示 widget->show(); widget->resize(1200, 800); return a.exec(); }
mymodel.cpp #include "mymodel.h" MyModel::MyModel(Qt3DCore::QEntity *rootEntity): m_rootEntity(rootEntity) { m_torus = new Qt3DExtras::QTorusMesh(); m_torus->setRadius(1.0f); m_torus->setMinorRadius(0.4f); m_torus->setRings(100); m_torus->setSlices(20); //设置物体的表面网格 Qt3DCore::QTransform *torusTransform = new Qt3DCore::QTransform(); torusTransform->setScale(2.0f); torusTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 25.0f)); torusTransform->setTranslation(QVector3D(5.0f, 4.0f, 0.0f)); //创建缩放,平移和旋转组件并将其添加到QTransform组件中 Qt3DExtras::QPhongMaterial *torusMaterial = new Qt3DExtras::QPhongMaterial(); torusMaterial->setDiffuse(QColor(QRgb(0xbeb32b))); //更改网格的漫反射颜色,我们创建一个QPhongMaterial并设置其漫反射颜色。 m_torusEntity = new Qt3DCore::QEntity(m_rootEntity); m_torusEntity->addComponent(m_torus); m_torusEntity->addComponent(torusMaterial); m_torusEntity->addComponent(torusTransform); //将圆环添加到实体树中,然后通过QEntity使用父实体创建一个,然后添加先前创建的网格,材质并将组件转换到其中来完成。 } MyModel::~MyModel() { } void MyModel::enableTorus(bool enabled) { m_torusEntity->setEnabled(enabled); }
以上是关于Qt 3D c++ :代码汇总的主要内容,如果未能解决你的问题,请参考以下文章