我正在使用顶点和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
我意识到这可能是因为片段着色器必须在两点之间进行插值,你们能想出一种识别天顶线并使其更亮的好方法吗?我宁愿避免使用几何着色器...
答案 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;
}
不知道它有多整洁,但它确实有效。