我正在尝试将一段距离作为顶点属性从我的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;
}
答案 0 :(得分:3)
在这里正常工作
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如何定义顶点属性。