qml_puthon_user
qml_puthon_user3 декабря 2019 г. 1:36

Как в QML форму добавить 3D объект.

Всем доброго времени суток!
Я пишу интерфейс для пользователя и в него мне нужно добавить вращающийся 3д объект.
Как я понял, на python ещё нет QtQuick3D, поэтому пользовался Qt3D.
Для примера написал код из видео.
Qt3D QML Tutorial 1. Шаблон проекта / Project template

Написал код:

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.3
import Qt3D.Core 2.0
import Qt3D.Input 2.0
import Qt3D.Render 2.0
import Qt3D.Logic 2.0
import Qt3D.Extras 2.0

ApplicationWindow{
    id:general_win
    visible: true
    width: 1680
    height: 920
    title: qsTr("Test title")

    Rectangle 
    {
        id: mainwindow
        width: 640
        height: 480
        color: "green"

        Entity 
        {
            id: rootEntity

            Camera 
            {
                id: mainCamera
                projectionType: CameraLens.PerspectiveProjection
                fieldOfView: 60.0
                aspectRatio: 16.0 / 9.0
                nearPlane: 0.1
                farPlane: 1000.0
                position: Qt.vector3d(0.0, 0.0, 40.0)
                upVector: Qt.vector3d(0.0, 1.0, 0.0)
                viewCenter: Qt.vector3d(0.0, 0.0, 0.0)
            }

            TorusMesh 
            {
                id: torusMesh
                radius: 15.0
                minorRadius: 6.0
                slices: 16
                rings: 32
            }

            PhongMaterial
            {
                id: torusMaterial
            }

            Transform
            {
                id: torusTransform
                translation: Qt.vector3d(0.0, 0.0, 0.0)
            }

            components: 
            [
                RenderSettings
                {
                    activeFrameGraph: ForwardRenderer
                    {
                        clearColor: Qt.rgba(1, 1, 1, 1)
                        camera: mainCamera
                    }
                },
                InputSettings {}
            ]

            Entity
            {
                id: torusEntity
                components: [torusMesh, torusMaterial, torusTransform]
            }
        }
    }
}

Скрипт python который вызывает форму:

from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot

if __name__ == "__main__":
    import sys

    # создаём экземпляр приложения
    app = QGuiApplication(sys.argv)
    # создаём QML движок
    engine = QQmlApplicationEngine()

    # загружаем файл qml в движок
    engine.load("Interface_vr_eyes.qml")

    engine.quit.connect(app.quit)
    sys.exit(app.exec_())

В конечном итоге, окно приложения отображается, зелёный прямоугольник отображается в нём, а вот 3д объект, который создаётся из видео-урока не появляется на экране. Подскажите, в чём может быть проблема?
P.S. а точно ли нет QtQuick3D для питона? Если есть, подскажите.
P.S.S ещё хотел бы знать, как загрузить свою модель сделанную в КОМПАС-3D/Blender3D. На этот вопрос ответ увидел, да, загружать модель из Blender3d в расширении obj можно.

Увидел в видео, что код вызова qml файла тоже немного переписан... Там создаётся уже как бы сцена для 3д объекта, а мне нужно вставить 3д обект в главную форму получается...
Что-то типа...

import QtQuick 2.12
import ... (т.д.)

//главное окно программы
ApplicationWindow
{
    id:general_win
    visible: true
    width: 1680
    height: 920
    title: qsTr("Test title")

    //label
    //button
    //image
    //и т.д.

    //блок с вращающейся 3д моделью
    Rectangle
    {
        id: mainwindow
        width: 640
        height: 480
        color: "green"

        //описание видимости 3д модели
    }

}

Спасибо!

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

11
Evgenii Legotckoi
  • 3 декабря 2019 г. 5:50

Так там не используется QML, но могу предположить, что у вас не установлен PyQt5.Qt3DCore и остальные соответствующие библиотеки

    qml_puthon_user
    • 3 декабря 2019 г. 6:04

    Установлено

    Устанавливал через pip3 install pyqt3d

      qml_puthon_user
      • 3 декабря 2019 г. 6:06
      • (ред.)

      Да, в примере не используется QML, подумал, что от туда хоть как-то можно оттолкнуться.
      Если из видео, в первом сообщении, пример рабочий для python. То проблема стоит в том, что я не могу вызвать qml файл из python.

        qml_puthon_user
        • 3 декабря 2019 г. 8:01
        • (ред.)

        У меня даже нет предложения о "setSource", как в видео...

        setSource наблюдаю пока что только в QSceneLoader()

          qml_puthon_user
          • 3 декабря 2019 г. 8:54

          Реализация безнадёжна? :)

            Evgenii Legotckoi
            • 3 декабря 2019 г. 8:57
            • (ред.)

            У нас с вами разница во времени скорее всего достаточно большая, поскольку я в Праге проживаю. Так что не кипишуйте. Мне сегодня ещё долго работать. Да и тут узнал, что вечером корпоратив, даты которого я перепутал. Так что наберитесь терпения )))

              qml_puthon_user
              • 3 декабря 2019 г. 9:06

              Пардон.) Буду ждать и экспериментировать.)

                qml_puthon_user
                • 3 декабря 2019 г. 12:18

                Полазил я по файлам Qt Design Studio, нашёл там библиотеку QtQuick3D и остальные. Сверил с файлами, которые есть у самого питона в site-packages и увидел, что да, у питона нет папки QtQuick3D. Как я понял, для вызова этой библиотеки нужен файл питона с расширением .pyd, который может называться QtQuick3D.pyd(почему так? решил из того, что есть файл QtQuick.pyd :)).

                Я не смог осилить написать зависимости, чтобы на питоне запустить QtQuick3D. Если хотите, можете попробовать. :) А так, остаётся ждать от разработчика Riverbank.
                Riverbank | Software | PyQt | What is PyQt?

                  Evgenii Legotckoi
                  • 4 декабря 2019 г. 15:38
                  • Ответ был помечен как решение.

                  Я посмотрел то видео, и сравнил с вашим кодом. У вас не запускается 3D потому, что вы не используете Qt3DQuickWindow, а используете обычный QML engine. В этом проблема, чтобы вообще 3D заработало. Но вашем случае это не получится запустить потому, что Qt3DQuickWindow отсутствует в PyQt5. Так что нужно изучать C++ ;-)

                    qml_puthon_user
                    • 4 декабря 2019 г. 22:07

                    Спасибо за помощь! :) Я попытаю надежды в ожидании QtQuick3D от Riverbank'a. :)

                      Комментарии

                      Только авторизованные пользователи могут публиковать комментарии.
                      Пожалуйста, авторизуйтесь или зарегистрируйтесь
                      AD

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Результат:50баллов,
                      • Очки рейтинга-4
                      m
                      • molni99
                      • 26 октября 2024 г. 1:37

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Результат:80баллов,
                      • Очки рейтинга4
                      m
                      • molni99
                      • 26 октября 2024 г. 1:29

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Результат:20баллов,
                      • Очки рейтинга-10
                      Последние комментарии
                      i
                      innorwall11 ноября 2024 г. 22:12
                      Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
                      i
                      innorwall11 ноября 2024 г. 18:23
                      QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
                      i
                      innorwall11 ноября 2024 г. 15:50
                      Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
                      i
                      innorwall11 ноября 2024 г. 14:19
                      Алгоритм сортировки кучей The role of raloxifene in preventing breast cancer priligy precio
                      i
                      innorwall11 ноября 2024 г. 13:55
                      PyQt5 - Урок 006. Работа с QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
                      Сейчас обсуждают на форуме
                      i
                      innorwall11 ноября 2024 г. 20:56
                      добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
                      i
                      innorwall11 ноября 2024 г. 10:55
                      Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                      9
                      9Anonim25 октября 2024 г. 9:10
                      Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
                      ИМ
                      Игорь Максимов3 октября 2024 г. 4:05
                      Реализация навигации по разделам Спасибо Евгений!

                      Следите за нами в социальных сетях