Qt: Повернуть 3D-модель

У меня был собственный объект 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, но он тоже не может работать. Кто-нибудь может дать мне несколько советов?


person notthing    schedule 28.07.2015    source источник
comment
Ваш пример кода C++ ничего не делает. Пожалуйста, опубликуйте полный пример. Конечно, это может быть только QML.   -  person Kuba hasn't forgotten Monica    schedule 28.07.2015


Ответы (1)


Этот пост старый, но я могу поделиться своим личным опытом с примером. Если другие люди ищут ответ, то он есть.

Я не знаю вашего проекта, но если вы хотите изменить угол поворота из C++, используйте закрытую переменную MainWindow, которая отправляет значение с помощью QTimer с макросом Q_PROPERTY.

Если вы хотите использовать только QML, вы можете увидеть этот проект github. Это очень просто. https://github.com/oria66/test-qml-3d-model-rotation

person oria66    schedule 01.06.2018