-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
5.12.1
-
None
-
Qt Creator
Rendering of a very transparent Mesh (DiffuseSpecularMaterial with alpha channel of diffuse color value 0.1 and alphaBlending set to true) in a QQuickView results in a slightly transparent black (color of qquickview) mesh instead of a very transparent mesh.
Example code
C++:
// int main(int argc, char *argv[]) { QApplication::setAttribute(Qt::AA_UseDesktopOpenGL); QApplication app(argc, argv); QMainWindow mainWindow; QWidget* viewersContainerWidget = new QWidget(); QGridLayout* m_viewersLayout = new QGridLayout(viewersContainerWidget); m_viewersLayout->setContentsMargins(0, 0, 0, 0); QQuickView *quickView = new QQuickView(); quickView->setSource(QUrl("qrc:/main.qml")); quickView->setResizeMode(QQuickView::SizeRootObjectToView); quickView->setColor("transparent"); QWidget *container = QWidget::createWindowContainer(quickView); container->setMinimumSize(800, 800); m_viewersLayout->addWidget(container, 0, 1); mainWindow.setCentralWidget(viewersContainerWidget); mainWindow.resize(800, 600); mainWindow.show(); return app.exec(); }
QML:
Item {
id: root3DViewer
Scene3D {
id: scene3DRoot
anchors.fill: parent
aspects: ["input", "logic"]
Entity {
id: sceneRoot
Camera {
id: camera
projectionType: CameraLens.PerspectiveProjection
nearPlane : 0.01
farPlane : 1000.0
fieldOfView: 45
position: Qt.vector3d(0,0,-20)
viewCenter: Qt.vector3d(0,0,2.5)
}
OrbitCameraController {
camera: camera
}
components: [
RenderSettings {
ForwardRenderer {
camera: camera
clearColor: "black"
}
},
InputSettings {}
]
Entity {
DirectionalLight {
id:directionalLight
worldDirection: camera.viewVector
}
components: [directionalLight]
}
Entity {
id: sphereEntity
DiffuseSpecularMaterial {
id: sphereMaterial
diffuse: Qt.rgba(1,0,0,0.9)
alphaBlending: true
}
Transform {
id: sphereTransform
translation: Qt.vector3d(0,0,0)
}
SphereMesh {
id: sphereMesh
radius: 1
}
components: [sphereTransform, sphereMaterial,sphereMesh]
}
Entity {
id: cylinderEntity
DiffuseSpecularMaterial {
id: cylinderMaterial
diffuse: Qt.rgba(0,0,1,0.1)
alphaBlending: true
}
Transform {
id: cylinderTransform
translation: Qt.vector3d(0,0,5)
}
CylinderMesh {
id: cylinderMesh
length: 4
radius: 1
}
components: [cylinderTransform, cylinderMaterial,cylinderMesh]
}
}
}
}
Using a Qt3DQuickWindow instead works fine
QGuiApplication app(argc, argv);
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();