顶点属性的插值

时间:2018-11-15 17:45:25

标签: opengl glsl shader fragment-shader

我正在尝试将一段距离作为顶点属性从我的C ++代码传递到着色器,该着色器在两个顶点之间绘制一条线。

当前,一条线的距离为0(起点),另一条线的距离为1.0。我希望可以像插入颜色一样插值该值,但是它似乎不起作用。因此,我希望一行的一半是红色,另一行是绿色,但是整行变成绿色。

下面的片段着色器代码,其中顶点着色器中的dist从float in_dist中的layout(location = 2)传入,并作为float dist传递出去(不执行任何操作)。

in float dist;

Fragment getFragment() 
{
    Fragment frag;
    frag.depth = vs_positionScreenSpace.w;

    frag.gPosition = vs_gPosition;

    if(dist > 0.5){
        frag.color = vec4(1.0,0.0,0.0,1.0);
    }else{
        frag.color = vec4(0.0,1.0,0.0,1.0);
    }

    frag.gNormal = vec4(0.0, 0.0, 1.0, 0.0);

    return frag;
}

顶点着色器

layout(location = 0) in vec3 in_point_position;
layout(location = 1) in vec4 in_color;
layout(location = 2) in float in_dist;

out float dist;

void main() {

    //somestuff....

    dist = in_dist;
}

2 个答案:

答案 0 :(得分:3)

在这里正常工作

screenshot of green-red line

MCVE

scala> res23.collect.foreach(println)
    7.0
    5.6
    1.0
    0.998
    0.99
    0.656
    NaN

or 
    scala> res21.collect.foreach(println)
    NaN
    0.656
    0.99
    0.998
    1.0
    5.6
    7.0

答案 1 :(得分:0)

已解决;事实证明,问题不在于着色器代码,而在于atl glVertexAttributePointer如何定义顶点属性。