【发布时间】:2014-07-01 02:02:42
【问题描述】:
我正在开发一个增强现实应用程序,需要对三种不同几何图形的渲染进行排序。
1 级
背景几何。这是一组代表基本架构的三角形。墙壁等
2级
拍照飞机。作为纹理放置在空间平面上的建筑照片。该平面在几何上位于 Level 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 遮挡
有什么帮助吗?
谢谢!
【问题讨论】:
标签: opengl-es augmented-reality stencil-buffer zbuffer