首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL ES中AR叠加效应的自定义绘制顺序(10)

OpenGL ES中AR叠加效应的自定义绘制顺序(10)
EN

Stack Overflow用户
提问于 2014-05-13 11:53:43
回答 2查看 310关注 0票数 0

我正在研究一个增强现实应用程序,需要对三种不同几何图形的绘制进行排序。

1级

背景几何。这是一组代表基本架构的三角形。墙壁等

2级

摄影飞机。一张建筑的照片,作为空间平面上的纹理。那架飞机在第一层的前面是几何的(从虚拟相机上可以看到)

3级

动态几何这些都是原语,如盒子等,以扩大场景。它们在二级后几何位置,因为它们被正确地放置在1级的坐标系中。

预期效果:

我希望Level_2总是被画在Level_1前面,这是通过将图像平面靠近相机来自动实现的。

( b)我希望Level_3对Level_1正确地被遮挡,从而隐藏动态盒的一部分,如果它被部分放置在Level_1墙后面,这在正常的管道中也会自动发生。深度测试等

( c)我希望Level_3的所有片段/像素都绘制在Level_2之上,即使它们实际上在后面。这种效果应该会使物体出现,就好像它们被照片的部分遮住了一样。

我知道这是可能的,因为我在X3Dom中有一个应用程序(它呈现给webgl),它可以通过"sortkey“属性实现这一效果。但我无法在纯OpenGL中重现同样的效果。我认为这应该是Stencilbuffer或Z缓冲区技巧的简单使用,但我无法让它发挥作用。我如何将“始终传递”给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遮挡。

有什么帮助吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-26 18:44:26

一段时间后发现了,但忘了在这里更新。解决办法如预期的那样简单。DepthTesting始终保持活动状态。呈现按1,2,3的顺序调用。2级的呈现包含在

Gl.glDepthMask(假);

Gl.glDepthMask(真);

允许对每个级别进行正确的深度渲染和遮挡,但不会从呈现级别2元素中更改深度缓冲区。因此,第3级元素忽略了级别2的深度,而忽略了针对级别1的剪辑。

票数 0
EN

Stack Overflow用户

发布于 2014-05-14 21:03:11

您需要在三个阶段渲染场景相应地达到您所描述的级别。在启用深度测试的情况下,应该首先呈现level_1。然后,您应该使用禁用的深度测试来呈现level_2。在第三阶段,您应该在启用深度测试的情况下呈现level_3。因此,level_2的几何形状将呈现完全重叠的level_2,同时它不会影响z-缓冲区,因此level_3的几何形状将被呈现为完全不呈现level_2。

要启用和禁用深度测试,应该调用glEnable和glDisable函数。调用glDisable(GL_DEPTH_TEST)将禁用深度测试和深度缓冲区更新。要启用深度测试和写入深度缓冲区,您应该调用glEnable(GL_DEPTH_TEST)

您需要执行的一般步骤:

代码语言:javascript
复制
    /*
    Render level_1 
    */

    glDisable(GL_DEPTH_TEST); //disable depth test and update of the depth buffer

    /*
    Render level_2         
    */

    glEnable(GL_DEPTH_TEST);  //enable depth test and update of the depth buffer

    /*
    Render level_3         
    */
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23630540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档