Qt:旋转三维模型

Qt:旋转三维模型,qt,3d,qml,qtquick2,qt3d,Qt,3d,Qml,Qtquick2,Qt3d,我有一个自定义的QML对象模型。QML用于加载和旋转三维模型: Model.qml Entity { id: root property Material material property alias myRoll : transform.rollAngle components: [ transform, mesh, root.material ] Transform { id: transform objectName: "MyModel" proper

我有一个自定义的QML对象
模型。QML
用于加载和旋转三维模型:

Model.qml

Entity {
id: root

property Material material

property alias myRoll : transform.rollAngle

components: [ transform, mesh, root.material ]

Transform {

    id: transform
    objectName: "MyModel"

    property real rollAngle : 0
    property real pitchAngle : 20

    Translate { id: translation }
    Scale { id: scaleTransform }

    Rotate { 
        objectName: "rotateRoll"
        axis : Qt.vector3d(1, 0, 0)
        angle : transform.rollAngle
    }

}


Mesh {
    id: mesh
    source: "qrc:/3dmodel/Drone.obj"
}}
main window.cpp
I
setSource
到qml,以及
main.qml
中,它包含模型对象

main window.cpp

QWidget *container = QWidget::createWindowContainer(&view);
QSurfaceFormat format;
format.setMajorVersion(3);
format.setMinorVersion(3);
format.setProfile(QSurfaceFormat::CoreProfile);
format.setDepthBufferSize(24);
view.setFormat(format);
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:/src/main.qml"));
ui->scrollArea_3D->setWidget(container);
QQmlEngine engine;
QQmlComponent component(&engine, QUrl("qrc:/src/Model.qml"));
QObject *object = component.create();    
QObject *rotateObject = object->findChild<QObject *>("rotateRoll");        
rotateObject->setProperty("angle", this->roll);    
qDebug() << "Property value:" << rotateObject->property("angle").toFloat();
engine.destroyed();
在drone.cpp中,每当该属性发生更改时,我都会更新属性“rollAngle”以旋转模型,但它无论如何都不起作用。下面是我用来更新“rollAngle”的代码

drone.cpp

QWidget *container = QWidget::createWindowContainer(&view);
QSurfaceFormat format;
format.setMajorVersion(3);
format.setMinorVersion(3);
format.setProfile(QSurfaceFormat::CoreProfile);
format.setDepthBufferSize(24);
view.setFormat(format);
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:/src/main.qml"));
ui->scrollArea_3D->setWidget(container);
QQmlEngine engine;
QQmlComponent component(&engine, QUrl("qrc:/src/Model.qml"));
QObject *object = component.create();    
QObject *rotateObject = object->findChild<QObject *>("rotateRoll");        
rotateObject->setProperty("angle", this->roll);    
qDebug() << "Property value:" << rotateObject->property("angle").toFloat();
engine.destroyed();
QQmlEngine发动机;
QQmlComponent组件(&engine,QUrl(“qrc:/src/Model.qml”);
QObject*object=component.create();
QObject*rotateObject=object->findChild(“rotateRoll”);
旋转对象->设置属性(“角度”,此->滚动);

qDebug()这篇文章很老,但我可以用一个例子来分享我的个人经验。如果其他人在那里寻找答案,答案就在那里

我不知道你的项目,但是如果你想修改C++的旋转角度,使用主窗口的私有变量,用qQualPro宏宏发送QTIMER值。


如果您只想使用QML,您可以看到这个github项目。这很简单