理想情况下,我想做的是绘制一个矩形,让GLSL处理实际网格线的创建。
到目前为止,我的尝试中顶点着色器:
#version 400
layout (location = 0) in vec4 in_position;
layout (location = 2) in vec3 in_UV;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
smooth out vec3 ex_UV;
smooth out vec3 ex_originalPosition;
void main()
{
gl_Position = projection * view * model * in_position;
ex_UV = in_UV;
ex_originalPosition = vec3(in_position.xyz);
}
模型矩阵将四边形进行放大,例如10,000倍。
#version 400
layout (location = 0) out vec4 color;
smooth in vec3 ex_UV;
smooth in vec3 ex_originalPosition;
uniform vec4 lineColor;
void main(void)
{
if(fract(ex_UV.x / 0.001f) < 0.01f || fract(ex_UV.y / 0.001f) < 0.01f)
color = lineColor;
else
color = vec4(0);
}
我尝试过使用纹理坐标和世界空间位置。两者的效果都相同,某些角度看起来很好,但在其他角度看起来很糟糕。
我想也许可以根据距离缩放透明度,使得网格渐渐消失,但问题在于,就像第二张图片中所显示的那样,从屏幕中心开始,即使是那些线条也会呈现出间隙(网格的目的是为原点提供视觉参考框架)。
有没有更简单的方法呢?
编辑
如要求所示的屏幕截图:
VBO 线段与 x8 多重采样帧缓冲区
VBO 线段与 x8 多重采样帧缓冲区和 glEnable(GL_LINE_SMOOTH)
最终选择
我选择了其中任一(不太重要),并根据距离原点的距离简单降低了透明度。虽然这符合我的目的,但并不是我问的问题。