是否存在一种随时显示3D实体的简便方法,即使该实体隐藏在另一个实体的后面?例如,我希望当线在网格表面后面时始终显示它们。
我使用Qt3D框架。
答案 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
在顶部绘制线条。