gpt4 book ai didi

glsl - gl_FragCoord.x, y, z 为所有像素为 1,w 为深度

转载 作者:行者123 更新时间:2023-12-04 10:08:38 26 4
gpt4 key购买 nike

我正在使用带有着色器的 THREE.js。我正在尝试获取 zbuffer 信息。

顶点着色器:

// switch on high precision floats
#ifdef GL_ES
precision highp float;
#endif

void main()
{
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}

片段着色器:
#ifdef GL_ES
precision highp float;
#endif

void main()
{
gl_FragColor = vec4(gl_FragCoord.x, gl_FragCoord.y, gl_FragCoord.z, 1.0);
}

场景中有不同位置的物体,因此zbuffer中的值应该有所不同。

奇怪的是 gl_FragCoord.x , gl_FragCoord.ygl_FragCoord.z好像是 1.0对于所有片段,而 gl_FragCoord.w似乎因不同的片段而异。

如果我使用 gl_FragCoord.w :
#ifdef GL_ES
precision highp float;
#endif

void main()
{
float zbuffer = gl_FragCoord.w * 500.0;
gl_FragColor = vec4(zbuffer, zbuffer, zbuffer, 1.0);
}

似乎是 zbuffer 图像:

enter image description here

那么为什么要 gl_FragCoord.w表示深度信息,而 gl_FragCoord.z总是 1.0对于所有片段?

最佳答案

gl_FragCoord是在窗口空间。和 window space在窗口的像素坐标中。因此,几乎所有片段的值都会 > 1.0。而且由于您几乎肯定不会渲染到浮点帧缓冲区,因此您的颜色将被限制在 [0, 1] 范围内。
gl_FragCoord.z可能不是 1.0,但它可能足够接近它,具体取决于您的深度范围以及物体与相机的距离。如果你想真正了解深度,你需要linearize it .

关于glsl - gl_FragCoord.x, y, z 为所有像素为 1,w 为深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15151076/

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