OpenGL如何使用不可见遮罩隐藏其后面的对象
我有一个OpenGL问题要解决。我有一个对象/网格A、一个对象/网格B和一个背景纹理C 最初,帧缓冲区由背景纹理C填充。我们在帧缓冲区中绘制A和B。我们希望使对象A可见,而对象B始终不可见 开始时,A在B前面。在旋转过程中,根据深度测试结果,在一定角度下,B在A前面,但由于B始终不可见,B的部分应填充背景C 有人知道解决这个问题的简单方法吗 模板测试是一种好方法吗?基本上将对象B设置为a颜色,将B的颜色与背景C进行比较,并在测试失败时显示背景COpenGL如何使用不可见遮罩隐藏其后面的对象,opengl,opengl-es,depth,depth-buffer,stencils,Opengl,Opengl Es,Depth,Depth Buffer,Stencils,我有一个OpenGL问题要解决。我有一个对象/网格A、一个对象/网格B和一个背景纹理C 最初,帧缓冲区由背景纹理C填充。我们在帧缓冲区中绘制A和B。我们希望使对象A可见,而对象B始终不可见 开始时,A在B前面。在旋转过程中,根据深度测试结果,在一定角度下,B在A前面,但由于B始终不可见,B的部分应填充背景C 有人知道解决这个问题的简单方法吗 模板测试是一种好方法吗?基本上将对象B设置为a颜色,将B的颜色与背景C进行比较,并在测试失败时显示背景C 有人有我可以阅读的示例代码吗?最简单的解决方案是:
有人有我可以阅读的示例代码吗?最简单的解决方案是:
glColorMask
-如果通过该通道为每个通道提供GL\u FALSE
,则后续几何体不会写入任何颜色输出。但是,假设您没有触碰glDepthMask
,它仍然会写入深度输出
因此,您目前可能已经获得了代码:
drawBackground(C);
render(A);
render(B);
您只需将其调整为:
drawBackground(C);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
render(B);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
render(A);
只是为了澄清C始终是背景-如果B呈现在A上方,您希望显示C,如果A呈现在B上方,您希望看到A?是的,您是对的。C永远是背景。。。。这就像是你在a上画的一个洞?我想他只是想让B+a成为这个洞-如果它只是B/C,那么你应该看到B?我不明白要求,如果B不与a重叠会发生什么?你想只为A前面的B部分显示背景而不是B吗?我将撤回此答案,等待对问题的澄清。按要求取消删除。