3D实体始终可见,即使在另一个实体后面

时间:2018-08-23 10:47:38

标签: python-3.x opengl qt3d pyside2

是否存在一种随时显示3D实体的简便方法,即使该实体隐藏在另一个实体的后面?例如,我希望当线在网格表面后面时始终显示它们。

我使用Qt3D框架。

2 个答案:

答案 0 :(得分:2)

假设您正在谈论Qt3D框架,我想扩展Rabbid76的答案。

要在Qt3D框架中禁用深度测试,请将QRenderStateSet添加到呈现事物的帧图分支(例如,将其添加为QViewPort),然后将QDepthTest添加到它。然后,将QDepthTest的深度功能设置为始终。这样,将始终通过深度测试,并且还将绘制背面的实体,具体取决于绘制顺序。您可以使用QSortPolicy将绘图顺序调整为从后到前。

但是,当摄像机位置更改并且您始终要绘制的实体位于前面时,此功能将无效。我建议您添加另一个框架图分支,并使用QLayerFilter来仅停用此实体的深度测试。

如果您的实体在停用深度测试时看起来很奇怪(可能对于复杂对象而言),则可以将QDepthTest替换为QClearBuffers,只需清除深度缓冲区即可。

看看我的答案here,其中展示了一个带有深度测试的自定义框架图的示例。

答案 1 :(得分:1)

如果禁用深度测试,则总是在先前绘制的几何图形的顶部绘制几何图形(如直线)。可以通过以下方式禁用深度测试:

glDisable(GL_DEPTH_TEST)

请参见glEnable


可以选择将深度测试功能设置为使片段始终通过深度测试。在Qt中,这可以由类QDepthTest使用枚举常量Qt3DRender::QDepthTest::Always来完成。

在这种情况下,您必须注意绘制几何图形的顺序。 您必须找到一种方法,首先使用深度测试功能Qt3DRender::QDepthTest::Less来渲染多边形(不透明的几何图形)。 之后,您必须使用深度测试功能Qt3DRender::QDepthTest::Always在顶部绘制线条。