В идеале я хотел бы нарисовать один четырехугольник, а создание реальных линий сетки сделать с помощью 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)
я остановился на
Я остановился на любом из вышеперечисленных (на самом деле не имеет значения, на каком) и просто понизил альфу в зависимости от расстояния от начала координат. Это служит моей цели, хотя это не вопрос, который я задал.