gpt4 book ai didi

c++ - 将非均匀数组传递给着色器

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:19 26 4
gpt4 key购买 nike

我有一个片段着色器的想法,它会检查当前片段是否在多边形内。该多边形的顶点值应该通过 float 组传输到该着色器。问题是统一的 float 组被丢弃(位置 = -1),因为着色器不直接使用它。

我不知道如何通过统一值等其他方法将数组传递给着色器。有人可以指导我找到更好的解决方案吗?

TIA。

编辑:(更好的解释)

我有一个浮点值数组,代表一些多边形的顶点。我从该数组计算最小最大值并将这两个(最小/最大) vector 传递给几何着色器,几何着色器在该多边形下生成一个四边形。现在,我的片段着色器应该获取该多边形顶点数组并分析每个片段是否在该多边形内。如果在里面,画一些颜色,如果在外面画一些其他颜色。

顶点:

in vec3 inPosition;

void main(void)
{
gl_Position = vec4(inPosition, 1.0);
}

几何:

layout(lines) in;
layout(triangle_strip) out;
layout(max_vertices = 4) out;

uniform mat4 u_proj;

void main()
{

vec4 pos0 = u_proj * gl_in[0].gl_Position;
vec4 pos1 = u_proj * gl_in[1].gl_Position;

//left up
gl_Position.x = pos0.x;
gl_Position.y = pos1.y;
gl_Position.w = pos0.w;
EmitVertex();
//left down
gl_Position = pos0;
EmitVertex();
//right up
gl_Position = pos1;
EmitVertex();
//right down
gl_Position.x = pos1.x;
gl_Position.y = pos0.y;
gl_Position.w = pos1.w;
EmitVertex();
EndPrimitive();
}

片段:

uniform float points[570];

out vec4 outColor;

void main()
{
int nvert = 570;

float testx = gl_FragCoord.x;
float testy = gl_FragCoord.y;

int i;
int j;
bool c = false;
for (i = 0, j = nvert - 3; i < nvert; i = i + 3, j = i)
{
if (((points[i + 1]>testy) != (points[j + 1] > testy)) && (testx < (points[j] - points[i]) * (testy - points[i + 1]) / (points[j + 1] - points[i + 1]) + points[i]))
{
c = !c;
}
}

if (c == true)
{
outColor = vec4(1.0, 1.0, 1.0, 1.0);
}
else
{
outColor = vec4(0.0, 0.0, 0.0, 1.0);
}
}

这些:

m_FILL_uniProjId = glGetUniformLocation(m_FillProgram, "u_proj");
m_FILL_uniCount = glGetUniformLocation(m_FillProgram, "count");
m_FILL_uniPoints = glGetUniformLocation(m_FillProgram, "points");

每个返回 -1。

这是我填充统一数组的方式:

for (int i = 0; i < 570; ++i)
{
glUniform1fv(m_FILL_uniPoints + i, 1, &m_Points->at(i));
}

'570' 只是我测试场景中使用的临时值,因为我知道我使用的多边形的大小。

最佳答案

您可以将多边形顶点作为与几何着色器不同的形式传递

关于c++ - 将非均匀数组传递给着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22609998/

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