Тип QML View3D
Обеспечивает область просмотра для отрисовки 3D-сцены. Подробнее...
| Оператор импорта: | import QtQuick3D |
Свойства
- camera : QtQuick3D::Camera
- environment : QtQuick3D::SceneEnvironment
- importScene : QtQuick3D::Node
- renderMode : перечисление
- renderStats : QtQuick3D::RenderStats
- scene : QtQuick3D::Node
Методы
- vector3d mapFrom3DScene(vector3d scenePos)
- vector3d mapTo3DScene(vector3d viewPos)
- PickResult pick(float x, float y)
- List<PickResult> pickAll(float x, float y)
- PickResult rayPick(vector3d origin, vector3d direction)
- List<PickResult> rayPickAll(vector3d origin, vector3d direction)
Подробное описание
View3D предоставляет 2D-поверхность для отрисовки 3D-сцены. Эта поверхность является элементом Qt Quick Item и может быть размещена в сцене Qt Quick.
Существует два способа определения 3D-сцены, визуализируемой в View3D: если вы определяете иерархию элементов на основе Node как дочерние элементы View3D непосредственно, то это станет неявной сценой View3D.
Также можно сослаться на существующую сцену, используя свойство importScene и задав для него корневой Node сцены, которую вы хотите визуализировать. Этот Node не обязательно должен быть предком View3D, и у вас может быть несколько View3D, импортирующих одну и ту же сцену.
Это продемонстрировано в примере View3D.
Если View3D имеет как дочерние узлы, так и установленное свойство importScene, то обе сцены будут отрисованы так, как будто они были дочерними поддеревьями в одной сцене.
Чтобы управлять способом отрисовки сцены, можно установить свойство environment. Тип SceneEnvironment имеет ряд визуальных свойств, которые можно настроить, таких как цвет фона, тональная коррекция, сглаживание и многое другое.
Кроме того, для того, чтобы что-либо отображалось в View3D, сцене необходима камера. Если в сцене есть только одна камера, то она будет автоматически выбрана. В противном случае, для выбора камеры можно использовать свойство camera. Камера определяет, какие части сцены видимы и как они проецируются на 2D-поверхность.
По умолчанию 3D-сцена сначала отрисовывается в буфере вне экрана, а затем компонуется с остальной частью сцены Qt Quick, когда это будет сделано. Это обеспечивает максимальный уровень совместимости, но может иметь последствия для производительности на некоторых графических картах. Если это так, свойство renderMode можно использовать для изменения способа отрисовки View3D в окне.
View3D с режимом отрисовки Offscreen по умолчанию также является поставщиком текстур qsgtextureprovider. Это означает, что ShaderEffect или Texture.sourceItem могут ссылаться на View3D напрямую, если все элементы находятся в одном окне qquickwindow. Как и в случае с любым другим элементом Item, можно переключить View3D или одного из его предков в слой элементов на основе текстуры item layer.
См. также Пример Qt Quick 3D - View3D.
Документация свойств
camera : QtQuick3D::Camera
Это свойство указывает, какая камера используется для отрисовки сцены. Если это свойство не установлено, будет использоваться первая активная камера в сцене.
Примечание: Если это свойство содержит камеру, которая не видима, дальнейшие попытки найти камеру не будут предприниматься.
См. также PerspectiveCamera, OrthographicCamera, FrustumCamera и CustomCamera.
environment : QtQuick3D::SceneEnvironment
Это свойство задает SceneEnvironment, используемый для отрисовки сцены.
См. также SceneEnvironment.
importScene : QtQuick3D::Node
Это свойство определяет узел-ссылку сцены, который будет отрисован в области просмотра. Узел не обязан быть дочерним элементом View3D. Этот сославшийся узел становится соседом с дочерними узлами View3D, если таковые имеются.
Примечание: Это свойство может быть установлено только один раз, и последующие изменения не повлияют на результат.
См. также Node.
renderMode : перечисление
Это свойство определяет, как View3D комбинируется с другими частями сцены Qt Quick.
По умолчанию сцена отрисовывается в буфере вне экрана как промежуточный шаг. Затем этот буфер вне экрана отрисовывается в окно (или целевой объект рендеринга), как любой другой элемент Qt Quick Item.
Для большинства пользователей нет необходимости изменять режим рендеринга, и это свойство можно смело игнорировать. Однако на некоторых графических процессорах использование буфера вне экрана может стать узким местом производительности. Если это так, может быть целесообразно поэкспериментировать с другими режимами.
| Постоянная | Описание |
|---|---|
View3D.Offscreen |
Сцена отрисовывается в буфере вне экрана как промежуточный шаг. Затем этот буфер вне экрана компонуется с остальной частью сцены Qt Quick. |
View3D.Underlay |
Сцена отрисовывается непосредственно в окне до отрисовки остальной части сцены Qt Quick. В этом режиме View3D не может быть размещена поверх других элементов Qt Quick. |
View3D.Overlay |
Сцена отрисовывается непосредственно в окне после отрисовки Qt Quick. В этом режиме View3D всегда будет расположена поверх других элементов Qt Quick. |
View3D.Inline |
Граф сцены View3D встраивается в основной граф сцены, и применяются те же семантики упорядочивания, что и для любого другого элемента Qt Quick Item. Поскольку этот режим может привести к незначительным проблемам, в зависимости от содержимого сцены, из-за встраивания 3D-содержимого на основе глубины в граф 2D-сцены, его не рекомендуется использовать, если только это не возникнет особая необходимость. |
Значение по умолчанию — View3D.Offscreen.
Примечание: При изменении режима отрисовки важно отметить, что View3D.Offscreen (значение по умолчанию) — единственный режим, который гарантирует безупречную точность графики. Другие режимы имеют ограничения, которые могут вызвать визуальные артефакты, поэтому важно проверить, что визуальный вывод по-прежнему корректен при изменении этого свойства.
Примечание: При использовании режимов Underlay, Overlay или Inline может оказаться полезным, а в некоторых случаях и необходимым, отключить запись буфера глубины графа сцены Qt Quick с помощью QQuickGraphicsConfiguration::setDepthBufferFor2D() до отображения QQuickWindow или QQuickView, содержащих элемент View3D.
[только для чтения] renderStats : QtQuick3D::RenderStats
Это свойство предоставляет статистику об отрисовке кадра, такую как fps, frameTime, renderTime, syncTime и maxFrameTime.
[только для чтения] scene : QtQuick3D::Node
Содержит корневой узел сцены View3D.
См. также importScene.
Документация методов
vector3d mapFrom3DScene(vector3d scenePos)
Преобразует scenePos из пространства сцены (3D) в пространство просмотра (2D).
Возвращаемые значения x и y будут в координатах вида, где верхний левый угол находится в [0, 0], а нижний правый — в [ширина, высота]. Возвращаемое значение z содержит расстояние от ближней клип-плоскости усеченной пирамиды (clipNear) до scenePos в координатах сцены. Если расстояние отрицательное, это означает, что scenePos находится позади активной камеры. Если scenePos нельзя отобразить в позиции в сцене, возвращается позиция [0, 0, 0].
Для работы этой функции необходимо, чтобы камера была назначена представлению.
См. также mapTo3DScene() и Camera.mapToViewport().
vector3d mapTo3DScene(vector3d viewPos)
Преобразует viewPos из пространства вида (2D) в пространство сцены (3D).
Значения x и y из viewPos должны быть в координатах вида, где верхний левый угол находится в [0, 0], а нижний правый — в [ширина, высота]. Значение z интерпретируется как расстояние от ближней клип-плоскости усечённой пирамиды (clipNear) в координатах сцены.
Если viewPos не может быть успешно отображено в позиции в сцене, возвращается позиция [0, 0, 0].
Для работы этой функции необходимо, чтобы представлению была назначена камера.
См. также mapFrom3DScene() и Camera.mapFromViewport().
PickResult pick(float x, float y)
Этот метод направит луч в сцену из координат вида x и y и вернёт информацию о ближайшем пересечении с объектом в сцене.
Например, это можно вызвать с координатами мыши, чтобы найти объект под курсором.
[since 6.2] List<PickResult> pickAll(float x, float y)
Этот метод направит луч в сцену из координат вида x и y и вернёт список информации о пересечениях с объектами в сцене. Возвращаемый список отсортирован по расстоянию от камеры, ближайшие пересечения появляются первыми, а самые дальние — последними.
Например, это можно вызвать с координатами мыши, чтобы найти объект под курсором.
Этот метод был добавлен в Qt 6.2.
[since 6.2] PickResult rayPick(vector3d origin, vector3d direction)
Этот метод направит луч в сцену, начиная с origin и в direction, и вернёт информацию о ближайшем пересечении с объектом в сцене.
Например, это можно вызвать с позицией и вектором направления любого объекта в сцене, чтобы увидеть, какой объект находится перед элементом. Это позволяет выполнять выбор из любой точки сцены.
Этот метод был добавлен в Qt 6.2.
[since 6.2] List<PickResult> rayPickAll(vector3d origin, vector3d direction)
Этот метод направит луч в сцену, начиная с origin и в direction, и вернёт список информации о ближайших пересечениях с объектами в сцене. Список отсортирован по расстоянию от точки начала луча вдоль вектора направления, ближайшие пересечения появляются первыми, а самые дальние — последними.
Например, это можно вызвать с позицией и вектором направления любого объекта в сцене, чтобы увидеть, какие объекты находятся перед элементом. Это позволяет выполнять выбор из любой точки сцены.
Этот метод был добавлен в Qt 6.2.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qml-qtquick3d-view3d.html