Qt 3D c++ (三):制作3D模型并将其显示在画布上

第一步:首先添加一个类用于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模型了。

Qt 3D c++ (三):制作3D模型并将其显示在画布上

原文链接: https://www.cnblogs.com/leocc325/p/12983654.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    Qt 3D c++ (三):制作3D模型并将其显示在画布上

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/351266

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午6:46
下一篇 2023年3月2日 上午6:46

相关推荐