我正在开发一个增强现实应用程序,需要对三种不同几何图形的渲染进行排序。
级别 1
背景几何。这是一组代表基本架构的三角形。墙壁等
2 级
照片平面。作为纹理放置在空间平面上的建筑照片。该平面在几何上位于 1 级前面(从虚拟相机中看到)
3 级
动态几何。这些是诸如盒子之类的基元,用于增强场景。它们在几何上落后于 Level 2,因为它们正确地放置在 Level 1 的坐标系内
期望的效果:
a) 我希望 Level_2 始终绘制在 Level_1 的前面 这是通过将图像平面放置在更靠近相机的位置来自动实现的。
b) 我希望 Level_3 被 Level_1 正确遮挡,从而隐藏动态框的一部分,如果它部分放置在 Level_1 的墙后面。这也会自动发生在普通管道中。深度测试等
c) 我希望 Level_3 的所有片段/像素都绘制在 Level_2 之上,即使它们实际上在它后面。效果应该使对象看起来好像它们被照片的某些部分遮挡了。
我知道这是可能的,因为我在 X3Dom 中有一个应用程序(它呈现给 webgl),它可以通过“sortkey”属性实现这种效果。但我无法在纯 OpenGL 中重新创建相同的效果。我认为这应该是对 Stencilbuffer 或 Z-Buffer 技巧的简单使用,但我没有让它工作。我如何给 Level_3 几何体一个“总是通过”,以便它被绘制在其他所有东西之上,但也正确地被 Level_1 遮挡?或者我如何让 Level_2 只隐藏 Level_1 而不是 Level_3,即使它在两者前面?
基本上:
1) Level_2 隐藏 Level_1
2) Level_1 和 Level_3 相互遮挡
3) Level_3 的可见部分(相对于 Level_1)不被 Level_2 遮挡
有什么帮助吗?
谢谢!