В идеалния случай това, което бих искал да направя, е да начертая единичен квадрат и да накарам 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 Multisampled Framebuffer
VBO линии с x8 Multisampled Framebuffer и glEnable(GL_LINE_SMOOTH)
Спрях се
Спрях се на едното от горните (няма значение кое) и просто намалих алфата като функция на разстоянието от началото. Това служи на моята цел, въпреки че това не е въпросът, който зададох.