1

我有一个 OpenGL 问题要解决。我有一个对象/网格 A、一个对象/网格 B 和一个背景纹理 C。

最初,帧缓冲区被背景纹理 C 填充。我们在帧缓冲区中绘制 A 和 B。我们想让对象 A 可见,而对象 B 始终不可见。

一开始,A在B前面。旋转过程中,根据深度测试结果,在一定角度,B在A前面,但由于B总是不可见的,所以B的部分应该用背景C填充。

有谁知道解决这个问题的简单方法?

模板测试是个好方法吗?基本上给物体B设置了颜色,将B的颜色与背景C进行比较,测试失败时显示背景C。

有人有我可以阅读的示例代码吗?

4

1 回答 1

2

最简单的解决方案是:

  1. 画 C;
  2. 使用颜色掩码绘制 B 以防止写入帧缓冲区(但不要触摸深度掩码,以便仍对深度缓冲区进行写入);
  3. 画A,进行深度测试。

具体要使用的是glColorMask- 如果您GL_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);
于 2015-05-29T17:47:34.787 回答