我有一个要解决的OpenGL问题。我有一个对象/网格A,一个对象/网格B和一个背景纹理C.
最初,帧缓冲区填充了背景纹理C.我们绘制了A& B在帧缓冲区中。我们希望对象A保持可见,对象B始终不可见。
在开始时,A在B的前面。在旋转期间,在某个角度,B基于深度测试结果在A的前面,但由于B总是不可见的,B的部分应该用背景C填充
有谁知道解决此问题的简单方法?
模板测试是一种好方法吗?基本上用一种颜色设置对象B,比较B的颜色和背景C,并在测试失败时显示背景C.
有没有人有我能读的样本代码?
答案 0 :(得分:2)
最简单的解决方案是:
使用的具体内容是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);