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

时间:2014-03-24 12:53:27

标签: c++ arrays opengl

如果当前片段在多边形内部,我知道片段着色器会出现问题。该多边形的顶点值应该由浮点数组转移到该着色器。问题是浮点数的均匀数组会被丢弃(位置= -1),因为它不会被着色器直接使用。

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

TIA。

编辑:(更好的解释)

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

顶点:

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));
}

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

1 个答案:

答案 0 :(得分:0)

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

传递