gpt4 book ai didi

ios - 在片段着色器中计算纹理坐标 (iOS/OpenGL ES 2.0)

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:32:03 26 4
gpt4 key购买 nike

我发现在我的片段着色器中,这两个语句给出相同的输出:

// #1
// pos is set from gl_Position in vertex shader
highp vec2 texc = ((pos.xy / pos.w) + 1.0) / 2.0;

// #2 - equivalent?
highp vec2 texc2 = gl_FragCoord.xy/uWinDims.xy;

如果这是正确的,你能解释一下数学吗?我理解#2,这是我想出的,但在论文中看到了#1。这是 NDC(归一化设备坐标)计算吗?

上下文是我正在使用与视口(viewport)大小相同的 FBO 的纹理坐标。一切正常,但我想了解数学。

顶点着色器的相关部分:

attribute vec4 position;
uniform mat4 modelViewProjectionMatrix;
varying lowp vec4 vColor;
// transformed position
varying highp vec4 pos;

void main()
{
gl_Position = modelViewProjectionMatrix * position;

// for fragment shader
pos = gl_Position;
vColor = aColor;
}

片段着色器的相关部分:

// transformed position - from vsh
varying highp vec4 pos;
// viewport dimensions
uniform highp vec2 uWinDims;

void main()
{
highp vec2 texc = ((pos.xy / pos.w) + 1.0) / 2.0;

// equivalent?
highp vec2 texc2 = gl_FragCoord.xy/uWinDims.xy;

...

}

最佳答案

(pos.xy/pos.w) 是归一化设备坐标 (NDC) 中的坐标值。该值在每个维度中的范围从 -1 到 1。

(NDC + 1.0)/2.0 将范围从 (-1 to 1) 更改为 (0 to 1)(0 on屏幕左侧,右侧 1 个,类似于顶部/底部)。

或者,gl_FragCoord 给出以像素为单位的坐标,因此它的范围从(0 到宽度)(0 到高度)

将此值除以宽度和高度 (uWinDims),再次给出从屏幕左侧的 0 到右侧的 1 的位置。

所以是的,它们看起来是等价的。

关于ios - 在片段着色器中计算纹理坐标 (iOS/OpenGL ES 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11663785/

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