Qt:旋转3D模型

3

我有一个自定义的 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 包含 Model 对象。

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 但它也不能运行。有人能给我一些建议吗?

你的C++示例代码没有任何作用。请发布一个完整的示例。当然,它可以完全是QML。 - Kuba hasn't forgotten Monica
1个回答

2
这篇文章有些旧了,但我可以分享一下我的个人经验,举一个例子。如果其他人在搜索答案,这里就有了。
我不知道你的项目是什么,但如果你想从C++修改旋转角度,可以使用MainWindow的私有变量,并通过QTimer和Q_PROPERTY宏发送该值。
如果你只想使用QML,可以看看这个github项目。非常简单。https://github.com/oria66/test-qml-3d-model-rotation

错误404:页面未找到。 - karlphillip
新链接 https://github.com/oria66/test-qml-3d-model-rotation - oria66
编辑你的答案以修复链接。 - karlphillip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接