OpenGL 440 - 控制frag中的线条粗细。

时间:2014-09-18 15:52:20

标签: opengl glsl lines vbo aliasing

我正在使用顶点和VB_LINES的VBO在opengl中绘制一个3D球形网格。我想要实现的是让一条线 - 天顶 - 比其他线更亮。

我显然存储了x,y,z coords和法线,然后想到我可以使用纹理坐标来标记"标记"在创建时的位置 - y坐标为0.像这样:

        if (round(y) == 0.0f){ 
            _varray[nr].tex[0] = -1.0; // setting the s variable (s,t texcoord),
                                       // passed in with vbo
        }

现在在片段着色器中,我收到了这个值并执行:

if(vs_st[0] == -1){
    diffuse = gridColor*2.f;
}else{
    diffuse = gridColor;
}

结果看起来很糟糕: Print Screen

我意识到这可能是因为片段着色器必须在两点之间进行插值,你们能想出一种识别天顶线并使其更亮的好方法吗?我宁愿避免使用几何着色器...

1 个答案:

答案 0 :(得分:0)

解决方案是:

if (round(y) == 0.0f) _varray[nr].tex[0] = -2; // set arb. number. 

然后不要将变量置于其他地方!然后是片段:

if( floor(vs_st[0]) == -2){
    diffuse = gridColor*2.f;
}else{
    diffuse = gridColor;
}

不知道它有多整洁,但它确实有效。