问题标签 [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.
opengl-es - 在 OpenGL 中执行每个片段的 DEPTH_TEST
我可以使用 OpenGL 在 OpenGL 中打开/关闭深度测试,glEnable( GL_DEPTH_TEST );
但这会打开/关闭整个绘图调用的测试。
我想在每个片段的基础上控制测试。
这是为了达到以下效果:在棋盘模式中,图元的一半像素可能被遮挡,但另一半总是被绘制,即使帧缓冲区中存在更接近于相机。
为了说明,请看这个例子,其中只有一半的金字塔像素可能被前面的框遮挡。
请注意,首先绘制红色框,并且在绘制绿色金字塔时已经在帧缓冲区中。
另请注意:我将最后绘制带有特殊深度测试的对象,因此不会发生先绘制红色框的情况。
出于我的目的,以这种方式绘制的所有对象都是凸的,并且永远不会遮挡自身。
我知道如何在我的片段着色器中获得棋盘图案:
但就我而言,我不想在每个片段的基础上完全丢弃,我只想在每个片段的基础上切换深度测试。
我的目标是 OpenGL-ES 3.0。
opengl - OpenGL优化天空盒渲染
我正在学习如何使用来自以下资源的立方体贴图绘制天空盒。
我已经到了他谈到我们如何优化天空盒渲染的部分。我明白了,而不是先渲染天空盒,这将导致width*height
计算视口片段然后只被其他对象透支,最好最后绘制它并1.0f
通过分配gl_Position
天空盒来伪造它的深度值由于透视分割,顶点着色器gl_Position = pos.xyww
基本上使每个gl_FragCoord.z
等于。1.0f
现在我们得到一个天空盒,它的每个片段都具有最大深度值,1.0f
他将深度函数更改为GL_LEQUAL
而不是GL_LESS
.
这是我有点困惑的地方。
如果我们最后渲染天空盒并且它的深度值等于1.0f
为什么我们需要将深度函数更改为GL_LEQUAL
?将其设置为是否足够,GL_LESS
因为如果我们渲染场景中的所有其他对象,它的深度值可能会小于1.0f
所以它会将其值写入z-buffer
小于的值1.0f
。现在,如果我们将天空盒的深度函数设置为GL_LESS
它,那么它只会传递深度值小于实际值的片段,z-buffer
这可能只会传递其他对象没有覆盖的片段,那么为什么我们需要GL_LEQUAL
?
opengl - 针对特定深度值强制深度测试,而不是片段的实际深度
我想通过使用glDepthFunc(GL_EQUAL)
和写入深度为1.0
(最高和默认值)的每个像素,在写入深度缓冲区的所有内容后面绘制一些图元
然而,为了让它工作,我必须忽略我的图元上计算的 Z 深度,迫使它们像1.0
对所有图元一样进行测试。
1.0
无论在顶点着色器中计算的实际 z深度如何,强制特定绘制中的所有片段测试为具有 z 深度的最简单方法是什么?
android - 如何测量手机与被摄物体之间的距离?
我正在尝试为要将 2D 照片转换为 3D 对象的应用程序获取移动设备和对象之间的距离,我有以下疑问:
- 有没有办法获取手机镜头与被摄物体之间的距离?
- 我们可以通过类似的方式确定手机内部镜头的焦距,我们是否在手机内部安装了深度传感器?
- 深度传感器是否存在于所有手机中?
可以使用手机内部的传感器获得手机的方向和方位等信息。如果没有深度传感器,如何使用手机本身测量距离?
c++ - 如何在 OpenGL 上使立方体面不透明?
我正在编写一个程序来在 OpenGL 上绘制一个立方体并在鼠标点击时连续旋转它。在特定角度,我能够看穿立方体(透明)。我启用了深度测试,所以我不知道为什么会这样。我不确定我是否正确启用了它。
c++ - 图形到图形深度依赖性,深度缓冲区被破坏
我正在尝试执行以下操作:使用渲染通道 1,渲染到附件集 S。
进行渲染通道 2,再次渲染到附件集 S。
在官方的Khronos github中有一对一的解释如何做到这一点:
在图形到图形依赖项下。但是,尝试实现与示例中相同的代码是行不通的。
这就是我所看到的:
这是我应该看到的:
我认为目前正在发生的是深度缓冲区没有正确同步,因此深度测试无法正常工作。我创建了两个渲染通道,如下所示:
我已经阅读并重新阅读了该示例,并尝试使我的代码尽可能与它相同,但是唉,问题仍然存在。我创建工作图像的方式是让两个渲染发生在同一个渲染通道下,但我不想那样做。
javascript - 如何检查Javascript中每个对象字段的深度
我的 React Native 应用程序中有一个导航功能,它将以开发人员模式传递给它的所有参数输出到控制台,有时我向参数发送了一个大存储并且它无法输出。得到关于循环对象引用的错误,因为对象很深。因此,我决定创建一个函数来检查对象的所有字段,并依赖它将信息输出到控制台,例如,如果对象字段的深度超过 1 级。
在不是深对象的情况下,它必须像这样返回对象本身:
对于深度对象,它必须返回所有非深度字段并加上对象深度字段的标志:
你能推荐我最好的方法吗?
c++ - 单个着色器中的 N 个深度图纹理
我有一个着色器 1 深度贴图纹理附加到它。
是否可以在一个着色器中将超过 1 个深度纹理附加到不同LightSpaceMatrix
的 es?
或者我应该在不同的帧缓冲区中进行吗?
c++ - openGL何时以及如何计算F_depth(深度值)
这意味着此时投影已经完成。这篇文章给了我们OpenGL使用的投影矩阵,影响一个点z坐标的因素是行:
请注意,计算此矩阵是为了将“金字塔”平截头体制成一个单位立方体。这意味着在应用此矩阵后,z 坐标也已映射到 [0,1]。
然后,深度值精度一章的作者告诉我们:这些视图空间中的 z 值可以是截锥体近平面和远平面之间的任何值,我们需要一些方法将它们转换为 [0,1]。问题是为什么在这一点上,当我们在应用投影矩阵时已经映射了它。
此外,他说:像这样的线性深度缓冲区:
F_depth=z-near/(far-near)
从未使用过,为了正确的投影属性,使用非线性深度方程:
但是,正如我们所见,z 在范围内使用:
这似乎是线性的。
所有这些自相矛盾的陈述让我非常困惑何时计算和比较片段的深度,以及实际用于计算它的方程是什么。在我的理解中,在应用 OpenGL 投影矩阵之后应该不再计算深度,但是在阅读完这篇文章后我真的很困惑。任何澄清?