问题标签 [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.
ios - 如何在 Metal iOS 中启用/禁用 DepthMask
我正在尝试使用 Metal 显示一些具有复杂 alpha 的 3D 对象。
我在同一个对象中得到白色边缘到对象 alpha 混合。但在不同的对象中工作正常。
我通过在一个对象中禁用 depthMask 在 Android 中解决了这个问题。
谁能帮助我如何在 Metal iOS 中做到这一点?
我的渲染编码器如下:
three.js - 禁用透明对象深度测试的解决方法?
在场景中,我只有透明对象,因此启用深度测试会导致对象相互隐藏。我知道深度测试不考虑任何透明度,它只是写入深度缓冲区,查看z
. 那么如何正确渲染两个透明物体呢?
我这样做了,renderer.context.disable(renderer.context.DEPTH_TEST);
但没有任何改变
立方体是MeshLambertMaterial({color: ..., transparent: true, opacity: 0.6})
飞机是MeshLambertMaterial({color: ..., transparent: true, opacity: 0.4})
立方体是在平面之后渲染的,但是如果立方体是不透明的,那么整个立方体将被正确渲染而没有任何丢弃(还要查看它们也是不透明的点,因此是可见的)。
那么如何让它考虑透明度并且不关心渲染顺序以便两个透明对象不会相互隐藏呢?
ios - Metal API:提高深度缓冲精度
Metal API 提供了哪些选项来提高深度缓冲区的精度,尤其是对于更远的对象?
我发现,即使将 nearZ 值设置得离相机很远,而 farZ 值设置得离相机很近,但附近的多边形之间仍然存在大量的 z-fighting。深度缓冲精度对于靠近相机的物体来说似乎很棒,但对于更远的物体来说真的很糟糕。
本文提出了一些很好的解决方案,但代码示例都面向 OpenGL 和 DirectX。
如何使用 Metal API 和/或 Metal 着色器来实现这些解决方案之一(即对数深度缓冲区)?
c# - 了解 Depth_Test opengl
我是opengl的新手,我很难在opengl中学习深度测试。有人可以解释一下是DEPTH_TEST
什么吗?我正在阅读我的文献,上面写着:
“它可以隐藏被其他对象覆盖的对象(按深度隐藏)。如果未启用,则会覆盖之前绘制的对象。”
我根本听不懂第一句话。例如,如果我必须在一些文本前面放一些文本quad
,而它的面积比那个文本更大,我该怎么做?如果DEPTH_TEST
没有启用,我会先画那个quad
,然后是文本,然后是文本会在那个前面quad
..但是什么时候DEPTH_TEST
启用?我不知道涵盖了什么,我不知道显示顺序是否重要...这可能只是关于有背面的 3d 物体,那些背面可以被覆盖?我什么时候应该使用DEPTH_TEST
?
提前致谢!:)
opengl - 如何将与用于深度比较的值不同的值写入深度缓冲区?
在 Open GL 中,是否可以在启用常规深度测试的情况下渲染多边形,但是当深度缓冲区值实际写入深度缓冲区时,我想写入自定义值?
(原因是我正在渲染一个粒子系统,应该针对场景中的几何体进行深度测试,但我想在粒子系统所在的位置写一个非常大的深度值,从而利用深度模糊后期进一步模糊粒子系统的处理步骤)
更新 为了进一步细化这个问题,是否可以不进行多次渲染?
swift - 如何使用 Metal 和 Swift 对 CAMetalLayer 进行深度测试?
最近我决定学习如何在 Swift 中使用 Metal 框架。我阅读了一些教程,观看了视频,做了一些事情,最后我不得不使用深度测试来让事情看起来不错。
我以前没有做过这么低级的图形编程,所以我在整个互联网上查看了深度测试的工作原理以及如何使用 CAMetalLayer 和 Metal 来实现它。
然而,我发现的所有深度测试示例都是使用 Open GL 完成的,我在 Metal 中找不到这样的功能。
如何使用 Metal 和 Swift 使用 CAMetalLayer 实现深度测试?
先感谢您!
opengl - opengl深度测试如何使用24位深度缓冲区?
我正在使用 32 位浮点值,将其输入到顶点着色器中以获取x,y,z
每个顶点的位置。但是,我读过 opengl 使用 24 位作为深度缓冲区,使用 8 位作为模板缓冲区。
因为,我正在复制相同的 32 位浮点数,gl_position
作为顶点着色器的输入,我想了解 opengl 如何将此 32 位浮点数转换为 24 位以进行深度测试。
shader - 为什么 gl_FragCoord.z 总是为零?
我正在使用 Vulkan (GTX 980),并且我有这个片段着色器:
但我注意到深度缓冲区工作不正常,所以我补充说:
果然,什么都没有。即使我在几何着色器中这样做
gl_FragCoord.z
仍然归零。x、y 和 w 值看起来不错(它们不为零)。如果我根本没有设置gl_FragDepth
,它似乎没有默认任何东西(输出闪烁,所以我假设垃圾值)。
作为参考,这是我的几何着色器。它创建狭窄的圆锥截面来表示矢量场的方向。
webgl - WebGL 如何在深度缓冲区中设置值?
在 OpenGL 中,深度缓冲区值是根据场景的近和远裁剪平面计算的。(参考:从深度缓冲区获取真正的 z 值)
这在 WebGL 中是如何工作的?我的理解是 WebGL 不知道我的场景的远近剪裁平面。近和远裁剪平面用于计算我的投影矩阵,但我从未明确告诉 WebGL 它们是什么,因此它不能使用它们来计算深度缓冲区值。
渲染我的场景时,WebGL 如何在深度缓冲区中设置值?