问题标签 [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 投票
1 回答
1969 浏览

iphone - 如何在 OpenGL ES 2.0 中绘制带有深度缓冲区的立方体?

我一直在尝试使用 OpenGL ES 2.0 和深度缓冲区来绘制一个立方体,但没有成功。

是否有任何可用的示例可供我比较以查看我哪里出错了?

0 投票
3 回答
568 浏览

iphone - 为什么需要深度缓冲区?

我不明白为什么我需要使用深度缓冲区,因为在这个项目中,立方体绘制时没有深度缓冲区。

对不起,我的英语不好。我是俄罗斯人,1.5 年前开始学习英语。

0 投票
1 回答
5957 浏览

opengl - 如何从 Z 缓冲区获取 Z 值

我在 OpenGL 中绘图时遇到问题,我需要准确查看深度缓冲区中放置了哪些值。谁能告诉我如何检索这些值?谢谢克里斯

0 投票
1 回答
5191 浏览

ios - 将纹理数据写入深度缓冲区

我正在尝试实现在:Compositing Images with Depth中描述的技术。

这个想法是使用现有的纹理(从图像加载)作为深度蒙版,基本上是伪造 3D。

我面临的问题是 glDrawPixels 在 OpenglES 中不可用。有没有办法在 iPhone 上完成同样的事情?

0 投票
1 回答
1435 浏览

opengl - OpenGL深度缓冲问题

在我最近的几个项目中,我一直在使用一些实用程序文件,这些文件是我在查看一些演示时发现

即一个名为 opengl.h 的文件 - 主要用于管理着色器,有点像 glew 和另一个文件 gl_font。

gl_font 是他们用来使用顶点缓冲区对象在屏幕上渲染字体的类。

但是,当我使用它在我的游戏中渲染帧速率时,它会正确绘制除天空盒之外的所有内容。由于某种原因,天空盒呈现为白色,如此处所示如果我不呈现字体,它看起来像这样

以下是我认为最重要的 gl_font 类的一些部分:

我尝试更改glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT);为 glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT | GL_TEXTURE_BIT); 并且背景纹理返回,但未渲染字体。

是渲染字体时深度缓冲区的图像,是未渲染时的样子。

任何人都可以阐明这个问题吗?

任何帮助将非常感激!

谢谢。

0 投票
1 回答
1795 浏览

android - Android 深度缓冲区问题:给遇到问题的人的建议

这周我浪费了大约 30 个小时来编写和重写代码,我认为我误解了 OpenGL 深度缓冲区的工作原理。我尝试的一切,都失败了。现在,我通过查找 OpenGL 的 Android 实现中可能存在的错误解决了我的问题。

请参阅此 API 条目:

http://www.opengl.org/sdk/docs/man/xhtml/glClearDepth.xml

void glClearDepth(GLclampd 深度);

指定清除深度缓冲区时使用的深度值。初始值为 1。

Android 的实现有两个版本的这个命令:

  • glClearDepthx采用整数值,钳位为 0-1

  • glClearDepthf采用浮点值,钳位为 0-1

如果你使用glClearDepthf(1)那么你会得到你期望的结果。如果您像我一样使用glClearDepthx(1),那么您会得到不同的结果。(请注意,1 是默认值,但是使用参数 1 调用命令会产生与根本不调用它不同的结果。)我不知道到底发生了什么,但是深度缓冲区被清除为一个与实际不同的值我已经指定了。

0 投票
1 回答
1573 浏览

opengl - OpenGL绘图模型中的奇怪深度/混合

我有一个奇怪的问题,我一生都无法弄清楚。我正在从 Maya 加载 OBJ 模型文件并将其渲染为 OpenGL 环境。这似乎进展顺利,在我的独立模型查看器中,它们显示正确。但是,当加载到游戏环境中时(使用我无法控制的有点奇怪的投影矩阵),模型无法正确显示。

顶点似乎在正确的位置,因为旋转模型给出了正确的 3D 感觉。但是,根据深度函数,模型的不同部分会出现(错误地)。

例如,在人的模型中,当人从左向右行走时(例如,模型的右侧对相机可见);如果深度功能设置为GL_LEQUAL,当人在躯干前面时,您将看不到人的右臂。但是,当模式设置为 时GL_LESS,您可以通过躯干看到左臂。这是用图片更容易看到的东西之一,所以我们开始吧:

GL_LESSGL_NOTEQUAL

在此处输入图像描述 在此处输入图像描述

GL_LEQUALGL_ALWAYS

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

应该注意的是,任何其他深度函数都不会显示任何内容。在 GL_LEQUAL 系列的第一张图片中,您几乎可以看到左臂在不应该被躯干部分遮挡的情况下。

以下是用于渲染模型的代码:

感谢任何人的帮助,这让我难倒了好几天。

0 投票
1 回答
380 浏览

directx - 第一次网格后缺少深度信息

我将 SlimDX 用于 Direct3D 10 应用程序。在应用程序中,我将 2 个加载到更多网格,图像加载为纹理并使用 fx 代码进行着色器。代码是根据 SlimDX 的示例“SimpleModel10”修改的

我将绘制调用、着色器设置代码移动到管理 1 个网格、着色器(效果)和绘制调用的类中。然后我初始化这个类的2个副本,然后依次调用draw函数。

输出,无论我如何更改网格的 Z 位置,稍后绘制的将始终保持在顶部。后来,当我使用 PIX 调试绘图调用时,我发现第二个网格没有深度,而第一个网格有深度。我试过 3 个网格,第 2 个和第 3 个网格也没有深度。有趣的是,所有这些都是从同一个类中实例化的,使用相同的绘图调用。

什么可能导致这样的问题?

以下是该类的绘制函数中的部分代码,我省略了其余部分,因为它涉及到几个类。我保留了样本的现有 OnRenderBegin() 和 OnRenderEnd():

编辑:经过大量调试和代码隔离,我发现罪魁祸首Font.Draw()在我的DrawString()函数中

注释掉 Font.Draw 解决问题。也许它会自动设置一些导致下一次网格绘制丢弃深度的状态。现在查看 SlimDX 的源代码。

0 投票
3 回答
2307 浏览

android - glDepthMask(GL_FALSE) 会破坏某些 GPU 上的帧缓冲区

glDepthMask(GL_FALSE)我有时会在渲染帧期间禁用深度缓冲区写入。这在某些 GPU(如摩托罗拉 Droid 的 PowerVR)上工作得非常好,但在带有 Adreno GPU 的 HTC EVO 上,我最终会发现帧缓冲区完全是垃圾(我看到我在某处渲染的网格的痕迹,但是整个屏幕大多是垃圾)。

如果我一直强制 glDepthMask 为真,那么一切正常。

我需要在部分 alpha 渲染期间关闭 glDepthMask。关闭深度写入会导致帧缓冲区被破坏的原因是什么?

0 投票
2 回答
3556 浏览

performance - 使用 GLSL 创建深度缓冲区直方图纹理

我正在使用当前上下文的深度缓冲区来影响我正在显示的纹理。纹理是一维的并且是灰度的。从左到右代表从近到远。某个深度处的像素越多,该点的纹理越亮,黑色表示没有像素处于该深度,白色表示所有像素都处于该深度。

现在我有一个glReadPixels()在深度缓冲区上执行的解决方案,在 CPU 上对其进行分析,然后将其写回纹理。这自然是应用程序中的真正瓶颈。

我正在寻找一个全 GPU 解决方案,其中深度缓冲区在着色器或类似的东西中进行分析,并以这种方式更新纹理。我考虑过创建一个片段着色器来读取深度值并增加到纹理中的相应像素,但这需要片段着色器可以写入其他纹理。我已经学会了禁止的东西,特别是如果他们必须写入同一个像素。

是否有我遗漏的技巧或技术,或者我是否被迫让 CPU 参与其中?