gpt4 book ai didi

opengl - 如何在片段着色器中获取像素信息?

转载 作者:行者123 更新时间:2023-12-03 10:26:05 58 4
gpt4 key购买 nike

在我的片段着色器中,我可以加载纹理,然后执行以下操作:

uniform sampler2D tex;

void main(void) {
vec4 color = texture2D(tex, gl_TexCoord[0].st);
gl_FragColor = color;
}

将当前像素设置为纹理的颜色值。我可以修改这些等等,而且效果很好。

但是有几个问题。我怎么知道我是“哪个”像素?例如,假设我想将像素 100,100 (x,y) 设置为红色。其他的都变黑了。我该怎么做:

“如果 currentSelf.Position() == (100,100);然后颜色=红色;否则颜色=黑色?”

?

我知道如何设置颜色,但如何获得“我的”位置?

其次,如何从相邻像素中获取值?

我试过这个:
vec4 nextColor = texture2D(tex, gl_TexCoord[1].st);

但不清楚它返回的是什么?如果我是 100,100 像素;如何从 101,100 或 100,101 中获取值?

最佳答案

How do I tell "which" pixel I am?


你不是一个像素。你是一个片段。 OpenGL 将它们称为“片段着色器”是有原因的;这是因为它们还不是像素。事实上,它们不仅可能永远不会成为像素(通过 discard 或深度测试或其他),多亏了多重采样,多个片段可以组合形成一个像素。
如果您想知道片段着色器在窗口空间中的位置,请使用 gl_FragCoord .片段位置是浮点值,而不是整数,因此您必须使用范围而不是单个“100, 100”值进行测试。

Secondly, how do I get values from a neighbor pixel?


如果您在谈论相邻的帧缓冲区像素,则不会。片段着色器不能从帧缓冲区中任意读取,无论是在它们自己的位置还是在相邻的位置。
如果您正在谈论从您访问的那个访问相邻的 texel,那么这只是偏置您传递给 texture2D 的纹理坐标的问题。 .您必须获得纹理的大小(因为您没有使用 GLSL 1.30 或更高版本,所以您必须手动将其传入),反转大小并从纹理坐标的 S 和 T 分量中添加或减去这些大小.

关于opengl - 如何在片段着色器中获取像素信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779415/

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