问题标签 [depth-buffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
474 浏览

opengl - opengl 绘制深度缓冲图像

在 openGL 上阅读时,我发现了一些我无法理解的东西。这是关于这个链接 方法描述的。我一直在努力实现他们所说的,但我没有掌握一些要素。假设我们有 3 张图像 i=0..2 图像[i][width*height*4](考虑 rgba8 图像)和每个图像对应的深度浮点深度[i][width*height]。我将如何实施链接中描述的技术?如果我有压缩纹理而不是图像,我也很感兴趣,我还能使用那里描述的技术吗?编辑:我试图将解释放入代码中,但到目前为止我只能设法提出这个问题,因为我无法理解该过程

0 投票
1 回答
296 浏览

c++ - 如何在深度缓冲区中获取先前的值?

我怎么能做下一个算法?:

我可以 glDepthMask(false);alpha < 1. 如果多边形有像素alpha = 1并且alpha < 1我有不正确的渲染图片。我需要它来呈现包含任何 alpha 值的文本掩码!

我不能使用深度纹理,因为我需要实时使用深度缓冲区!

0 投票
0 回答
736 浏览

ios - iOS:渲染到深度缓冲区并从中读取以进行离屏处理

问题

我的主要目标是获取设备上触摸的模型坐标,以便检查您触摸的内容。我和一个大模型一起工作,必须画很多东西,这些东西也必须是可触摸的。

为了实现这一点,我知道两种可能的方法:一方面,我们可以进行光线投射并将相机的指向矢量与模型相交,我们必须将其存储在内存中的某个位置。另一方面,这就是我想要做的,我们可以用旧的方式来做:

并将屏幕坐标转换回模型坐标。直到这里我是正确的吗?你知道在 opengl 应用程序中进行触摸处理的其他方法吗?如您所见,该函数将 winz 作为参数,这将是屏幕坐标处片段的高度,此信息通常来自深度缓冲区。我已经知道 opengl-es 2.0 不提供对其内部使用的深度缓冲区的访问,就像在“普通”opengl 中那样。那么我怎样才能得到这些信息呢?

苹果提供了两种可能性。要么创建一个带有深度附件的屏幕外帧缓冲区,要么将深度信息渲染到纹理中。对我来说可悲的是,该手册没有显示将信息读回 iOS 的方法。我想我必须使用 glReadPixels 并从他们那里读回来。我实现了我能找到的所有东西,但无论我如何设置它,我都没有从屏幕外帧缓冲区或纹理中得到正确的高度结果。我期望得到一个带有 z 值的 GL_FLOAT 。

z:28550323

r:72 g:235 b:191 [3]:1 <-- 总是这个

代码

胶合项目

就像我们现在一样,glu 库在 iOS 中不可用,所以我查找了代码并基于此源实现了以下方法:link。GLKVector2 屏幕输入变量是屏幕上的 X、Y 坐标,由 UITabGestureRecognizer 读取

}

它尝试从深度缓冲区或深度纹理中读取数据,这两者都是在绘制时生成的。我知道这段代码效率很低,但首先它必须在我清理之前运行。

我尝试只绘制额外的帧缓冲区(在这里注释掉),只绘制到平铺和一起,没有成功。

}

z 的值可能来自不同的类型。它只是一个必须放回浮点数据类型的浮点数吗?

谢谢你的支持!模式

1. 编辑

我现在也从我渲染的纹理中获取 RGBA。为此,我在绘制时激活了单独的帧缓冲区,而不是深度扩展,并将纹理连接到它。我编辑了上面的代码。现在我得到以下值:

如您所见,读取了 rgba 值。好消息是,当我触摸没有模型的天空时,值始终相同,而触摸模型时,值会有所不同。所以我认为纹理应该是正确的。但是我现在如何从这 4 个字节中重新组合出真正的值,然后可以将其传递给 gluUnProject?我不能把它扔到一个浮点数上。

0 投票
2 回答
816 浏览

c# - OpenGL ES 1.1 深度缓冲区无法在 iOS 5 上使用 MonoTouch

我无法在 iOS 5 上使用 MonoTouch 使深度缓冲区工作。我正在使用标准的 MonoTouch“OpenGL 应用程序”模板并添加此代码来测试深度缓冲区(OpenGL ES 1.1):

形状 B 和 C 都绘制在形状 A 的前面。即使使用“GL.DepthFunc(All.Never)”也会发生同样的事情。深度缓冲区被完全忽略。我还尝试使用以下代码手动创建深度缓冲区(而不是依靠 MonoTouch/OpenTK“iPhoneOSGameView”为我创建一个):

它仍然无法正常工作。你知道我怎样才能让深度缓冲区工作吗?我错过了什么吗?

0 投票
1 回答
1622 浏览

opengl-es-2.0 - glreadpixel gl_depth_component 返回 0?

我正在寻找一个立方体和一条线的交点的解决方案。所以我用

我显示了 zz ,但结果为 0。所以当我触摸立方体(实际上是在 2d 屏幕上)时,如何获得立方体的深度缓冲区值。我使用 GLES20 和 Android API level15。我的代码如下。

顺便说一句,挑选颜色效果很好。

谢谢!

0 投票
2 回答
1846 浏览

opengl - OpenGL depth buffer to texture (for various image sizes)

I'm having a problem with the depth buffer. I want to put into a texture. But it doesn't seem to work.

So, here's the piece of code I execute after rendering the objects:

The thing is (I'm with OpenGL 3.2+), the image for rendering has different size. Most of the time, it won't be a 2^i by 2^j for the size. So, is that a problem ?

Also, the other part of the problem might be in the fragment shader after:

After that, when I render a second time some shapes, I want to use the previous depth (the texture depth buffer), to do some effects.

But seriously... can anyone just show me a piece of code where you can get the depth buffer into a texture? I don't care if it's rendering to the texture or if the texture is extracted after the rendering! As long as I have a texture with the depth value to do the second pass... that's what is important!

0 投票
3 回答
698 浏览

xna - XNA 4.0 和无法解决的(我)深度好奇渲染

XNA 4.0 上关于深度问题的大头疼:

在此处输入图像描述


我已经找到了许多类似问题的答案,但没有一个适合我......

设备设置如下:

作为一个残酷的问题解决者,我尝试了大多数 DepthStencilFormat 和 DepthStencilState 的可能性......没有人像我想要的那样工作。

关于投影矩阵,我也尝试了许多近剪辑和远剪辑值。(立方体宽度:10f)但无法得到正确的结果。

我已经用许多不同的纹理对此进行了测试,所有这些都是不透明的。

我不使用BasicEffect,而是使用纹理+法线贴图的效果,这可能是问题的根源吗?

CubeEffect.fx

编辑:我尝试了 BasicEffect 并且问题是一样的......

所以...感谢您的帮助;)

0 投票
1 回答
1293 浏览

c# - 获取 kinect 的特定深度值

我目前正在尝试使用 XNA 中的 kinect 进行手/手指跟踪。为此,我需要能够指定我希望我的程序渲染的深度范围。我环顾四周,我看不到这是如何完成的。据我所知,kinect 的深度值仅适用于在 depthStream 中找到的预设范围。

我想做的是让它模块化,这样我就可以改变我的 kinect 渲染的深度范围。我知道这之前已经失败了,但我在网上找不到任何可以告诉我如何做到这一点的东西。

有人可以帮我吗?

我已经可以使用kinect渲染标准深度视图,并且我为转换深度帧所做的方法如下(我感觉这里需要设置一些东西)

我有一种强烈的预感,我需要更改 int player 和 int realDepth 值,但我不能确定。

0 投票
1 回答
1413 浏览

opengl - 使用 OpenGL 读取深度图

我提取了 2 张图像的深度图并将它们存储为 .tif 文件

现在我想使用openGL根据它们的深度加入这两个图像

所以我想从 .tif 文件中读取每个图像的深度,然后使用该深度来绘制具有更高深度的像素

为了更清楚,深度图是两个像这个 链接的图像

所以说我有前一张图片,我想把它和这张图片一起加入

关联

我的问题是如何从 .t​​if 文件中读取这个深度

0 投票
1 回答
5650 浏览

opengl-es - 如何有效地将深度缓冲区复制到 OpenGL ES 上的纹理

我试图通过从标准 GL移植一些代码,在 iOS 上的 OpenGL ES 2.0 中获得一些阴影效果。部分示例涉及将深度缓冲区复制到纹理:

但是,似乎 ES 不支持 glCopyTexImage2D。阅读相关线程,看来我可以使用帧缓冲区和片段着色器来提取深度数据。所以我试图将深度分量写入颜色缓冲区,然后复制它:

这是片段着色器:

我已经尝试过没有'bRenderDepth'分支,它并没有显着加快它。

现在几乎只是以 14fps 的速度执行此步骤,这显然是不可接受的。如果我以高于 30fps 的速度拉出副本。我从 Xcode OpenGLES 分析器中得到了关于复制命令的两个建议:

  1. file://localhost/Users/xxxx/Documents/Development/xxxx.mm: error: Validation Error: glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 960, 640, 0) : Height<640> is not a power两个

  2. file://localhost/Users/xxxx/Documents/Development/xxxx.mm:警告:GPU 等待纹理:您的应用更新了当前用于渲染的纹理。这导致 CPU 等待 GPU 完成渲染。

我将努力解决以上两个问题(也许它们是症结所在)。与此同时,任何人都可以提出一种更有效的方法来将深度数据提取到纹理中吗?

提前致谢!