gpt4 book ai didi

opengl - 如何从深度纹理中获取深度值?

转载 作者:行者123 更新时间:2023-12-04 14:41:55 39 4
gpt4 key购买 nike

我有完全填充的深度纹理,但似乎没有从中获得合适的值。

GLSL代码,片段着色器:

uniform sampler2D depth_tex;
uniform float viewport_w;
uniform float viewport_h;

void main()
{
vec2 coord = vec2(gl_FragCoord.xy);
float depth = texture2D(depth_tex, vec2(coord.x / viewport_w, coord.y / viewport.h)).r;
float c = material_amb * depth; // material_amb is preset by host
out_color = vec4(c, c, c, 1.0f);
}

我希望模型的颜色会随着顶点的深度而改变,但我看不到所有东西。当然,我可以在不增加深度的情况下看到模型。深度纹理的类型是 GL_DEPTH_COMPONENT,GL_FLOAT。有什么问题?我认为从纹理获取深度值的解决方案是错误的,但我不知道原因。深度值存储在哪里?以及如何获得深度值?

最佳答案

depth texture's type is GL_DEPTH_COMPONENT, GL_FLOAT

这毫无意义。 GL_FLOAT 不是 OpenGL image format . GL_DEPTH_COMPONENT 是一种图像格式,但它是未调整大小的。它指定了一个未指定大小的无符号、规范化整数深度格式。

GL_FLOAT 可能是您在 glTexImage 调用中从末尾数第二个参数中输入的内容,对吧?那就是pixel transfer范围;它描述了您复制到纹理的像素数据,而不是像素数据在纹理中的存储方式。 OpenGL 可以在许多不同类型的数据格式之间进行转换。

如果您的深度数据来自渲染到深度缓冲区,那么您必须先了解如何从非线性投影后空间转换为线性投影前空间,然后才能对该数据做一些有意义的事情。 This answer显示如何进行转换。

关于opengl - 如何从深度纹理中获取深度值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7241074/

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