有没有一种简单的方法可以一直显示3D实体,即使那个实体隐藏在另一个实体后面?例如,我希望当线条位于网格曲面之后时,它们始终显示为事件。
我使用Qt3D框架。
发布于 2018-08-23 18:58:14
假设您正在谈论Qt3D框架,我想扩展一下Rabbid76的答案。
要在Qt3D框架中禁用深度测试,请向渲染内容的framegraph分支添加一个QRenderStateSet (例如,作为QViewPort的那个),并向其添加一个QDepthTest。然后,将QDepthTest的深度函数设置为always。这样,深度测试将始终通过,并且还将根据绘制顺序绘制背面的实体。可以使用QSortPolicy将绘图顺序调整为从后到前。
但是,当相机位置发生变化,并且您始终希望绘制的实体位于前面时,这将不起作用。我建议您添加另一个framegraph分支,并使用QLayerFilter来仅停用此实体的深度测试。
如果你的实体在停用深度测试时看起来很奇怪(很可能是复杂的对象),你可以用一个QClearBuffers替换QDepthTest,然后简单地清除深度缓冲区。
看看我的答案here,我展示了一个带有深度测试的自定义框架图的示例。
发布于 2018-08-23 18:50:03
如果禁用深度测试,则始终在先前绘制的几何体的顶部绘制几何体(如线)。可以通过以下方式禁用深度测试:
glDisable(GL_DEPTH_TEST)请参阅glEnable
作为另一种选择,深度测试函数可以设置为让片段始终通过深度测试。在Qt中,这可以通过使用枚举器常量Qt3DRender::QDepthTest::Always的类QDepthTest来完成。
在这种情况下,您必须注意几何图形的绘制顺序。您必须找到一种方法,通过使用深度测试函数Qt3DRender::QDepthTest::Less首先渲染多边形(不透明几何体)。在此之后,您必须使用深度测试函数Qt3DRender::QDepthTest::Always在顶部呈现线条。
https://stackoverflow.com/questions/51984027
复制相似问题