Объект text2D предназначен для помещения текста в трехмерную сцену (например, для размещения некоторых текстовых тегов на указанных c объектах). Я думаю, вы просто хотите поместить текст на экран в качестве наложения.
Это можно сделать с помощью стандартного типа текста QML.
Я адаптировал ваш код и отметил новый строки с // ДОБАВЛЕНО. Строки, которые вам больше не нужны, помечены // REMOVED
pro file:
Вам понадобится модуль 3dextras в вашем pro файле
QT + = 3dextras
main. cpp
Измените ваш main. cpp, используя QQuickView вместо Qt3DQuickWindow. причина этого в том, что механизмы рендеринга между scene3D и Qt3DQuickWindow разные. Scene3D использует визуализатор QML для выполнения рендеринга, тогда как Qt3DQuickWindow создаст выделенный поток рендеринга. Другими словами: если вашей программе нужно только показать трехмерную среду, используйте Qt3DQuickWindow. Если вы хотите поместить текст и кнопки поверх вашей трехмерной среды, используйте QQuickView.
#include <Qt3DQuickExtras/qt3dquickwindow.h>
#include <Qt3DQuick/QQmlAspectEngine>
#include <QGuiApplication>
#include <QQmlContext>
#include <QQmlEngine>
#include <QQuickView>//ADDED
int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
//ADDED:
QQuickView view;
view.rootContext()->setContextProperty("_window", &view);
view.setSource(QUrl("qrc:/main.qml"));
view.setWidth(1600);
view.setHeight(900);
view.show();
//REMOVED:
// Qt3DExtras::Quick::Qt3DQuickWindow view;
// view.resize(1600, 800);
// view.engine()->qmlEngine()->rootContext()->setContextProperty("_window", &view);
// view.setSource(QUrl("qrc:/main.qml"));
// view.show();
return app.exec();
}
main.qml
В следующем примере я использую прямоугольник в качестве root и Scene3D на том же уровне, что и текст (в верхний левый угол) и кнопка, показывающая, как можно комбинировать стандартные типы QML.
Rectangle {
anchors.fill: parent
Scene3D{
anchors.fill: parent
focus: true
aspects: ["input", "logic"]
Entity {
id: sceneRoot
Camera {
id: camera
projectionType: CameraLens.PerspectiveProjection
fieldOfView: 45
aspectRatio: _window.width / _window.height
nearPlane: 0.1
farPlane: 1000.0
position: Qt.vector3d(0.0, 10.0, 20.0)
viewCenter: Qt.vector3d(0.0, 0.0, 0.0)
upVector: Qt.vector3d(0.0, 1.0, 0.0)
}
FirstPersonCameraController { camera: camera }
ShadowMapLight {
id: light
}
components: [
ShadowMapFrameGraph {
id: framegraph
viewCamera: camera
lightCamera: light.lightCamera
},
// Event Source will be set by the Qt3DQuickWindow
InputSettings { }
]
AdsEffect {
id: shadowMapEffect
shadowTexture: framegraph.shadowTexture
light: light
}
// Trefoil knot entity
Trefoil {
material: AdsMaterial {
effect: shadowMapEffect
specularColor: Qt.rgba(0.5, 0.5, 0.5, 1.0)
}
}
// Toyplane entity
Toyplane {
material: AdsMaterial {
effect: shadowMapEffect
diffuseColor: Qt.rgba(0.9, 0.5, 0.3, 1.0)
shininess: 75
}
}
// Plane entity
GroundPlane {
material: AdsMaterial {
effect: shadowMapEffect
diffuseColor: Qt.rgba(0.2, 0.5, 0.3, 1.0)
specularColor: Qt.rgba(0, 0, 0, 1.0)
}
}
}
}
Text {
id: title
text: qsTr("TITLE")
font.family: "Arial"
font.pointSize: 30
color: "black"
anchors.top:parent.top
anchors.left:parent.left
anchors.leftMargin: 20
anchors.topMargin: 20
}
}
РЕДАКТИРОВАТЬ
Вот экран печати примера, работающего на Windows10 с Qt5.13.2 MSVC2015 64bit и работает также на Qt5.14.0 MSVC2015 64bit