我有:
一组点
一组网格
我需要
根据深度以正确的z顺序绘制网格。为此,我使用了glDepthFunc(GL_LESS)
或glDepthFunc(GL_LEQUAL)
或glEnable(GL_DEPTH_TEST)
按绘制顺序渲染的点,忽略深度。为此,我使用了glDepthFunc(GL_ALWAYS)
或glDisable(GL_DEPTH_TEST)
。它们是使用GL_POINTS
和glVertex3d
绘制的
要渲染的网格,就好像点在正确的深度中一样。
图1显示了考虑深度时与网孔相对的平方的点。图2显示了忽略深度时渲染点的外观(因此,无论深度如何,红色点都出现在蓝色点的顶部),但是无论深度如何,网格始终位于点的后面。我希望网格与图1中的点具有相同的关系,但点与图2中的彼此具有相同的关系。
我意识到我会陷入两个点之间的网格之类的问题,但是深度较大的点将呈现在深度较小的点之上,但是在这种情况下,如果将较近的点呈现在上面最佳。
无论我如何尝试,无论每个对象的深度如何,都使网格位于所有点的后面或所有点的前面。我尝试绘制点,然后根据需要进行工作,绘制网格并根据需要进行工作,但是结合使用后,无论是先绘制点还是网格,都行不通。
问:有可能吗,如果可以,我该怎么做?
最佳答案
正如Michael Nastenko在评论中所说,要实现的效果需要绘制网格,然后旋转depth writing off,然后绘制“点”(深度测试仍处于启用状态)。显然,在绘制下一帧之前,您必须重新打开深度写。
通过关闭深度写入(使用glDepthMask(GL_FALSE)
),可以确保“点”不将其深度写入深度缓冲区。因此,在开始绘制“点”之前,仅针对场景深度测试每个“点”。如果两个“点”重叠,则将按渲染顺序绘制它们。
关于c++ - 在OpenGl中混合GL_ALWAYS和GL_LESS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52633657/