Как в 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
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Нашёл некий рабочий(почти) пример.
Что не так с механизмом обратного вызова в PyQt5.Qt3DCore с использованием примера QT
Так там не используется QML, но могу предположить, что у вас не установлен PyQt5.Qt3DCore и остальные соответствующие библиотеки
Установлено
Устанавливал через pip3 install pyqt3d
Да, в примере не используется QML, подумал, что от туда хоть как-то можно оттолкнуться.
Если из видео, в первом сообщении, пример рабочий для python. То проблема стоит в том, что я не могу вызвать qml файл из python.
У меня даже нет предложения о "setSource", как в видео...
setSource наблюдаю пока что только в QSceneLoader()
Реализация безнадёжна? :)
У нас с вами разница во времени скорее всего достаточно большая, поскольку я в Праге проживаю. Так что не кипишуйте. Мне сегодня ещё долго работать. Да и тут узнал, что вечером корпоратив, даты которого я перепутал. Так что наберитесь терпения )))
Пардон.) Буду ждать и экспериментировать.)
Полазил я по файлам Qt Design Studio, нашёл там библиотеку QtQuick3D и остальные. Сверил с файлами, которые есть у самого питона в site-packages и увидел, что да, у питона нет папки QtQuick3D. Как я понял, для вызова этой библиотеки нужен файл питона с расширением .pyd, который может называться QtQuick3D.pyd(почему так? решил из того, что есть файл QtQuick.pyd :)).
Я не смог осилить написать зависимости, чтобы на питоне запустить QtQuick3D. Если хотите, можете попробовать. :) А так, остаётся ждать от разработчика Riverbank.
Riverbank | Software | PyQt | What is PyQt?
Я посмотрел то видео, и сравнил с вашим кодом. У вас не запускается 3D потому, что вы не используете Qt3DQuickWindow, а используете обычный QML engine. В этом проблема, чтобы вообще 3D заработало. Но вашем случае это не получится запустить потому, что Qt3DQuickWindow отсутствует в PyQt5. Так что нужно изучать C++ ;-)
Спасибо за помощь! :) Я попытаю надежды в ожидании QtQuick3D от Riverbank'a. :)