OpenGL440-控制frag中的线厚度。
我正在使用顶点和GL_线的VBO在opengl中绘制一个3D球形网格。我想要达到的是有一条线——天顶线——比其他线更亮 我显然存储了x、y、z坐标和法线,然后我想我可能能够使用纹理坐标来“标记”创建时-y坐标为0的位置。像这样:OpenGL440-控制frag中的线厚度。,opengl,glsl,lines,vbo,aliasing,Opengl,Glsl,Lines,Vbo,Aliasing,我正在使用顶点和GL_线的VBO在opengl中绘制一个3D球形网格。我想要达到的是有一条线——天顶线——比其他线更亮 我显然存储了x、y、z坐标和法线,然后我想我可能能够使用纹理坐标来“标记”创建时-y坐标为0的位置。像这样: if (round(y) == 0.0f){ _varray[nr].tex[0] = -1.0; // setting the s variable (s,t texcoord),
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;
}
结果看起来有点糟糕:
我意识到这很可能是由于碎片着色器必须在两点之间插值,你们能想出一个好方法来识别天顶线并使其更亮吗?我宁愿避免使用几何体着色器…解决方案是:
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;
}
我不知道这有多整洁,但它很管用 在片段着色器中,尝试执行
if(vs_st[0]>0.5)
。@ColonelThirtyTwo-这会起作用,如果球体始终处于其原始位置-我旋转它,我该怎么办?