gpt4 book ai didi

GLSL片断位置

转载 作者:行者123 更新时间:2023-12-04 15:01:51 27 4
gpt4 key购买 nike

对不起,我会重写这个问题,希望清楚。

在我的 .cpp 代码中,我创建了一个四边形列表,其中一些有一个标志,在像素着色器中,我检查是否设置了此标志,如果未设置标志,则四边形将变为红色,例如,如果设置了标志,我想决定每个像素的颜色,所以如果我需要将标记的四边形的一半涂成红色,另一半涂成蓝色,我可以简单地执行以下操作:

if coordinate in quad < something color = red
else colour = blue;

通过这种方式,我可以将四边形的一半涂成蓝色,另一半涂成红色,或者我可以决定将红色放在哪里或将蓝色放在哪里。

想象一下我有一个 50x50 像素的四边形

[片段]
if(quad.flag == 1)
{
if(Pixel_coordinate.x<25 ) gl_fragColor = vec4(1.0, 0.0, 0.0, 1.0);
else gl_fragColor = vec4(0.0, 1.0, 0.0, 1.0);
}
else
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);

在这种情况下,我希望设置了标志的四边形每个面会得到两种颜色。
我希望我现在已经更具体了。

谢谢。

只是为了添加一些我不能使用任何纹理的东西。

好的,我现在这样做:

每个四边形都有 4 个纹理协调 (0,0)、(0,1)、(1,1)、(1,0);

我使用以下方法启用纹理坐标:
glTexCoordPointer(2, GL_SHORT, sizeof(Vertex), BUFFER_OFFSET(sizeof(float) * 7));

[垂直]
varying vec2 texCoord;

main()
{
texCoord = gl_MultiTexCoord0.xy;
}

[片段]
varying vec2 texCoord;

main()
{
float x1 = texCoord.s;
float x2 = texCoord.t;

gl_FragColor = vec4(x1, x2, 0.0, 1.0);
}

我总是得到黄色所以 x1 =1 和 x2 = 1 几乎总是和一些四边形是黄色/绿色。

我希望片段着色器中的纹理坐标发生变化,所以我应该得到一个渐变,我错了吗?

最佳答案

如果想知道quad内的坐标,需要自己计算。为此,您需要创建一个新的插值(称为 vec2 quadCoord 之类的东西),并为每个顶点适本地设置它,这意味着您可能还需要将其添加为属性并通过您的顶点传递着色器。例如:

// in the vertex shader
attribute vec2 quadCoordIn;
varying vec2 quadCoord;

main() {
quadCoord = quadCoordIn;
:

绘制四边形时,您需要在绘图代码中输入此属性。对于每个四边形,顶点可能具有 (0,0)、(0,1)、(1,1) 和 (1,0) 的 quadCoordIn 个值——如果您愿意,可以使用其他一些坐标系,但是这是最简单的。

然后,在您的片段程序中,您可以访问 quadCoord.xy 以确定您在四边形中的位置。

关于GLSL片断位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12111325/

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