gpt4 book ai didi

glsl - 线性化深度

转载 作者:行者123 更新时间:2023-12-03 23:15:42 29 4
gpt4 key购买 nike

在 OpenGL 中,您可以像这样线性化深度值:

float linearize_depth(float d,float zNear,float zFar)
{
float z_n = 2.0 * d - 1.0;
return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear));
}

(来源: https://stackoverflow.com/a/6657284/10011415 )

但是,Vulkan 处理深度值的方式略有不同 ( https://matthewwellings.com/blog/the-new-vulkan-coordinate-system/ )。我不太明白它背后的数学原理,我必须对函数进行哪些更改才能使用 Vulkan 线性化深度值?

最佳答案

OpenGL 和 Vulkan 之间的重要区别在于,归一化设备坐标 (NDC) 具有不同的 z(深度)范围。在 OpenGL 中它是 -1 比 1,而在 Vulkan 中它是 0 比 1。

但是,在 OpenGL 中,当深度存储到深度纹理中并从中读取时,该值会进一步规范化为 0 到 1。在您的示例中似乎就是这种情况,因为函数的第一行将其映射回-1 比 1。

在 Vulkan 中,您的深度始终介于 0 和 1 之间,因此上述函数在 Vulkan 中也有效。不过,您可以稍微简化一下:

float linearize_depth(float d,float zNear,float zFar)
{
return zNear * zFar / (zFar + d * (zNear - zFar));
}

关于glsl - 线性化深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51108596/

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