第一步:首先添加一个类用于3D模型的编辑,添加MyModel.h和MyModel.cpp
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
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); }
第二步:编辑好这两个文件之后,一个简单的3D模型就算创建完毕了,然后需要在画布上显示这个模型,还需要在main.cpp中添加代码
main.cpp #include <QCamera> #include <QEntity> #include "mymodel.h" main() { 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)); //设置相机参数 MyModel *mymodel = new MyModel(rootEntity); //创建一个mymodel类的对象 view->setRootEntity(rootEntity); //将3D物体添加到画布上显示 }
然后点击运行,可见到如下界面,已经可以看到这个3D模型了。
原文链接: https://www.cnblogs.com/leocc325/p/12983654.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/351266
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!