我有一个自定义QML对象Model.qml
来加载和旋转3D模型:
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"
}}
在mainwindow.cpp
我setSource
到qml,main.qml
它包含模型对象。
mainwindow.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);
在drone.cpp中,每当此属性发生更改时,我都会更新属性“rollAngle”以旋转模型,但无论如何它都不起作用。这是我用来更新“rollAngle”的代码
drone.cpp
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();
“rollAngle”更改但3D模型不会旋转。我使用SequenceAnimation
代替,但它也无法运行。谁能给我一些建议?
答案 0 :(得分:0)
这篇文章很老,但我可以通过一个例子分享我自己的个人经历。如果其他人在那里寻找答案。
我不知道您的项目,但如果您想修改C ++的旋转角度,请使用MainWindow的私有变量,该变量使用带有Q_PROPERTY宏的QTimer发送值。
如果你只想使用QML,你可以看到这个github项目。这很简单。 https://github.com/oria66/3d-model-rotation