gpt4 book ai didi

webgl - WebGL 如何在深度缓冲区中设置值?

转载 作者:行者123 更新时间:2023-12-01 23:04:40 34 4
gpt4 key购买 nike

在 OpenGL 中,深度缓冲区值是根据场景的近和远裁剪平面计算的。 (引用:Getting the true z value from the depth buffer)

这在 WebGL 中是如何工作的?我的理解是 WebGL 不知道我的场景的远近裁剪平面。近剪裁平面和远剪裁平面用于计算我的投影矩阵,但我从不明确告诉 WebGL 它们是什么,因此它不能使用它们来计算深度缓冲区值。

当我的场景被渲染时,WebGL 如何在深度缓冲区中设置值?

最佳答案

WebGL(如现代 OpenGL 和 OpenGL ES)从您提供给 gl_Position.z 的值中获取深度值。在您的顶点着色器中(尽管您也可以使用某些扩展直接写入深度缓冲区,但这并不常见)

WebGL 和现代 OpenGL 中都没有场景。场景的概念是 90 年代初遗留下来的遗留 OpenGL 的一部分,并且早已被弃用。它不存在于 OpenGL ES(在 Android、iOS、ChromeOS、Raspberry PI、WebGL 等上运行的 OpenGL...)

现代 OpenGL 和 WebGL 只是光栅化 API。您编写着色器,它们是在 GPU 上运行的小函数。您可以通过属性(每个迭代数据)、制服(全局变量)、纹理(2d/3d 数组)、变量(从顶点着色器传递到片段着色器的数据)为这些着色器提供数据。

剩下的取决于您以及您提供的着色器函数的作用。现代 OpenGL 和 WebGL 的所有意图和目的只是具有某些限制的通用计算引擎。让他们做任何事情取决于你提供着色器。

webglfundamentals.org更多。

在您链接的问答中,程序员提供的着色器决定使用平截头体数学来决定如何设置 gl_Position.z .平截头体数学由程序员提供。 WebGL/GL 不在乎如何gl_Position.z被计算,只是它是一个介于 -1.0 和 +1.0 之间的值,所以如何从深度缓冲区中获取一个值并返回到 Z 完全取决于程序员首先决定如何计算它。

This article涵盖最常用的数学设置 gl_Position.z使用 WebGL/OpenGL 渲染 3d 时。根据您的问题,我建议您阅读前面链接的文章开头的文章。

至于将哪些实际值写入深度缓冲区是

ndcZ = gl_Position.z / gl_Position.w;
depthValue = (far - near) / 2 * ndcZ + (near - far) / 2
nearfar尽管您可以使用 gl.depthRange 设置它们,但分别默认为 0 和 1但假设它们是 0 和 1 那么
ndcZ = gl_Position.z / gl_Position.w;
depthValue = .5 * ndcZ - .5

该 depthValue 然后将在 0 到 1 范围内,并转换为深度缓冲区的任何位深度。有一个 24 位深度的缓冲区是很常见的,所以
bitValue = depthValue * (2^24 - 1)

关于webgl - WebGL 如何在深度缓冲区中设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43564246/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com