问题标签 [depth-testing]

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 投票
2 回答
343 浏览

direct3d - Z-fighting Direct3D9,只有动态缓冲

我用我的 blendshape 代码中的数据锁定并填充 Direct3d9 中的每一帧的顶点缓冲区。我的着色使用两个步骤,所以我用一个着色器渲染一次,然后用我的另一个着色器绘制一个加法混合。

出于我以外的原因,我的顶点缓冲区中的数据(显然)在这两个绘图调用之间略有不同,因为我有闪烁的 z-fighting,其中第二遍有时会在第一遍渲染“后面”。

这一切都在一个线程中完成,并且缓冲区在渲染调用之前很长时间被解锁。此外,不会对任何着色器指令进行任何更改,因此两次调用中的数据应该完全相同。如果 blendshape 碰巧没有改变,则不会发生 z-fighting。

现在我在我的着色器中“推动”一点深度,但这是一个非常不雅的解决方案。

为什么这些数据会被改变?为什么 DirectX 会在我解锁缓冲区后更改缓冲区中的数据?我可以强迫它不改变它吗?

0 投票
1 回答
9062 浏览

c - glPolygonOffset中factor参数的含义和用法

我很难理解glPolygonOffset函数中第一个参数的含义。

官方文档说这个因素

指定用于为每个多边形创建可变深度偏移的比例因子。

然后

每个片段的深度值将在从适当顶点的深度值插值后偏移。offset 的值是 factor × DZ + r × units ,其中 DZ 是相对于多边形屏幕区域的深度变化的度量,而 r 是保证在给定的情况下产生可解析偏移的最小值执行。

我明白什么runit是什么。我不明白的是什么DZ,即“测量多边形屏幕区域的深度值变化”是什么意思,为什么我需要将因子设置为 0 以外的任何值。

如果我希望我的线框被偏移,我只需要在深度值上添加/减去几个单位,不是吗?factor参数(以及文档中提到的DZ)的含义、用途和使用示例是什么?

0 投票
3 回答
587 浏览

actionscript-3 - Stage3D 可以在所有其他对象后面绘制对象,而不管实际距离如何?

我正在 Stage3D 中制作一个 3D 空间游戏,并希望在所有其他对象后面绘制一个星域。我认为我遇到的问题是所涉及的距离非常高。如果我的星星真的比其他物体更远,我必须将它们缩放到无法正确渲染的程度 - 超过一定尺寸时,脸部似乎会闪烁。这也发生在我的行星网格上,当缩放到必要的大小(12000-100000 个单位)时。我在平面纹理上渲染星星,指向相机。只要它们没有放大太多,它们就可以渲染得很好,尽管显然在更远的其他物体面前。我尝试过各种深度测试模式(Context3DCompareMode.LESS,Context3DCompareMode. GREATER 和所有其他)结合在 z 缓冲区中包含和排除网格,只有当星星出现的位置不存在其他像素时才能渲染星星,没有运气。有谁知道我如何实现这一点 - 或者,更好的是,知道为什么,超过一定尺寸的网格不能正确渲染?是否有我不知道的任意上限?

0 投票
2 回答
1015 浏览

opengl - 在 OpenGL 保留深度测试中渲染 2D 图像(有深度)

我有一个来自外部源(比如软件光线追踪器)的图像,它也有一个深度缓冲区。我想在 OpenGL 场景(包含其他几个 3D 对象)中渲染该图像,以便正确更新 OpenGL 深度缓冲区,即应该使用正确的深度测试组合图像和其他 3D 对象。有任何想法吗?没有着色器的解决方案会很好。

0 投票
1 回答
223 浏览

flash - 在 AGAL 中,当使用“kil”操作码时,DepthTest 是否会跳过该像素?

假设我正在构建一个游戏,并且有一些瓷砖地图来创建多个图层的世界。该视图将是正交的,基本上只是一个自上而下的世界视图。

我正在考虑使用深度测试来比较从上到下(逐层)绘制的精灵。(注意:我知道这可能不是解决这个问题的最佳方法,但请幽默...

如果我有一些具有完全透明边缘的字符精灵(精灵周围的键控颜色或零 alpha),我可以在遇到这种情况时在片段着色器中使用“ kil ”操作码以确保 Quad 不呈现精灵透明部分的“洞”?(至少那是我假设会发生的事情)。

我想一个更简单的问题是......'kil'是否会忽略该像素并简单地留下上次drawTriangles()调用之前/之前的任何像素颜色?

0 投票
1 回答
7030 浏览

opengl - glDepthRange 是如何工作的?

我的顶点线是:

现在,我正在通过以下方式更改 z 线:

现在,由于 glDepthRange 调用,我期望 z 线将映射到 -0.5 到 0.5 的范围,并且我可以看到一个合适的立方体,但是当我使用扭曲的几何图形在上面评论 glDepthRange 调用时,它会给出 o/p。

0 投票
1 回答
574 浏览

opengl - depth_clamp 和 depth_test 的执行顺序

深度钳是在深度测试之前还是深度测试之后发生的?我正在渲染一个坐标 > 1.0 和 <-1.0 的基元,并使用深度钳位和深度测试。但是当我启用深度测试时,它不会渲染任何几何图形。

这是我的代码:

如何同时使用深度测试和夹紧?

为什么上面的代码在启用深度测试的情况下没有在屏幕上绘制任何东西?

0 投票
2 回答
424 浏览

java - 为什么深度测试在颜色选择的屏幕外渲染中不起作用?

我正在使用着色和离屏渲染在 OpenGL 上实现 QUADS 的选择工具。但是深度测试似乎在离屏渲染和某些角度和旋转下不起作用,选择了前面那个后面的QUAD。关于如何设置缓冲区和/或附件的任何想法?这个问题和我的法线有什么关系???还是只是深度测试??我个人认为这是深度测试,我就是无法让该死的东西工作!!!

这是我的缓冲区初始化函数:

当我取消注释“注释 1”和“注释 2”部分时,出现渲染缓冲区问题。但我听说我应该将“除了颜色附件之外的渲染缓冲区附加到 GL_DEPTH_ATTACHMENT”。(来源:看看这个 Q。我想知道我该怎么做。

另外,这是我的使用代码:

0 投票
1 回答
106 浏览

opengl - 关于深度纹理中的通道

我已经实现了深度纹理并在 2 个不同的驱动程序上获得了不同的输出。我正在片段着色器中读取纹理()中的所有通道:

在这种情况下,我分别在 A 和 B 上得到一个红色和灰色的图像。如果我读取红色通道并将其复制到所有 4 个通道,我会在 A 上得到一个灰色图像,例如:

哪一个是正确的? 在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
2198 浏览

opengl - 使用 glEnable(GL_DEPTH_TEST) 显示不正确

我下面的程序必须显示一个用简单灯照亮的旋转立方体。问题是立方体在闪烁。当我撤回调用 glEnable(GL_DEPTH_TEST) 时,立方体没有闪烁,但我可以看到里面的面(这是正常的,因为没有深度测试)。然而,这个电话是必不可少的。所以我不明白为什么这个函数的调用不能正常工作。

这是我的代码:

这是带有 glEnable(GL_DEPTH_TEST) 的屏幕(面孔在闪烁)

在此处输入图像描述

没有这个电话(没有闪烁的显示,但没有深度测试)

在此处输入图像描述

我尝试了几种代码组合都没有成功。

有人可以帮助我吗?

在此先感谢您的帮助。