Я хочу нарисовать квадрат из данных точки с помощью геометрического шейдера.Как нарисовать квадрат из данных точки с помощью геометрического шейдера
В vertex shader
, я испускаю одну точку.
#version 330 core
void main() {
gl_Position = vec4(0, 0, 0, 1.0);
}
В геометрическом шейдере я хочу создать треугольную полоску, образующую квадрат.
Размер не имеет значения в тот момент, так что модель должна иметь размер 1
(в диапазоне от (-0.5, -0.5) из исходного положения точки к (+0,5, +0,5).
мне нужно помогают вычислить положение испускаемых вершин, как видимые в коде:.?
#version 330 core
layout(points) in;
layout(triangle_strip, max_vertices=4) out;
out vec2 tex_coord;
uniform mat4x4 model;
uniform mat4x4 view;
uniform mat4x4 projection;
void main() {
int i;
for(i = 0; i < gl_in.length(); ++i) {
mat4x4 trans;
trans = //???
gl_Position = projection * view * model * trans * gl_in[i].gl_Position;
tex_coord = vec2(0, 0);
EmitVertex();
trans = //???
gl_Position = projection * view * model * trans * gl_in[i].gl_Position;
tex_coord = vec2(1, 0);
EmitVertex();
trans = //???
gl_Position = projection * view * model * trans * gl_in[i].gl_Position;
tex_coord = vec2(1, 1);
EmitVertex();
trans = //???
gl_Position = projection * view * model * trans * gl_in[i].gl_Position;
tex_coord = vec2(0, 1));
EmitVertex();
}
EndPrimitive();
}
Я думал использовать trans
перевести начальную точку в желаемые координаты Как я понимаю, это
Редактирование для ясности
Я хочу сгенерировать из одной точки то, что еще будет задано буфером вершин; один самолет:
float vertex[] {
-0.5, 0.5, 0.0,
0.5, 0.5, 0.0,
0.5, -0.5, 0.0,
-0.5, -0.5, 0.0
}
Вместо этого я даю только точку в середине этих точек и хочу создать реальные точки пути вычитания и добавления различий в центр (0,5 и -0.5 и т.д.). Все, что мне нужно, это знать, как применить это преобразование в коде (где находятся ???
).
Могу я точно спросить, почему вы хотите это сделать? Точечные спрайты (как правило) выполняют то же самое, производя квадрат, выровненный по экрану, хотя диапазон размеров может быть ограничен. В противном случае все, что вам нужно сделать, это реализовать афишу в геометрическом шейдере. –
@genpfault Насколько я понимаю ваш комментарий, в этом случае мне все равно не нужно будет указывать каждую вершину вручную и, следовательно, сделать геометрический шейдер бесполезным для этого случая? – Appleshell
@ AndonM.Coleman Я не после выравнивания по экрану, я хочу создать квадрат в пространстве модели (как если бы я указал 4 вершины от (-0,5, -0,5) до (0,5, 0,5) в качестве атрибута вершины) и затем обработайте его, как если бы это был обычный квадрат с двумя треугольниками. Поэтому я выполняю манипуляции p * v * m в геометрическом шейдере. – Appleshell