Я пытаюсь создать 2D пикселизацию Стэнфордского дракона, которую я позже расширю до 3D вокселизации.
Идеальный результат выглядит следующим образом:
![enter image description here](https://i.stack.imgur.com/cfqOG.png)
Это изображение создается с использованием следующего геометрического шейдера:
#version 440
layout (triangles) in;
layout (triangle_strip, max_vertices=136) out;
in vec3 v_pos[];
in vec3 v_norm[];
in vec2 v_uv[];
out vec3 f_pos;
out vec3 f_norm;
out vec2 f_uv;
void main()
{
vec3 side1 = v_pos[0] - v_pos[1];
vec3 side2 = v_pos[1] - v_pos[2];
vec3 tNorm = abs(cross(side1,side2));
for(uint i=0; i<3; i++)
{
f_pos = v_pos[i]/10;
f_norm = v_norm[i];
f_uv = v_uv[i];
if(tNorm.x>tNorm.y && tNorm.x>tNorm.z)
{
gl_Position = vec4(f_pos.y, f_pos.z, 0, 1);
}
else if(tNorm.y>tNorm.x && tNorm.y>tNorm.z)
{
gl_Position = vec4(f_pos.x, f_pos.z, 0, 1);
}
else
{
gl_Position = vec4(f_pos.x, f_pos.y, 0, 1);
}
EmitVertex();
}
EndPrimitive();
}
И фрагментного шейдера:
#version 440
in vec3 f_pos;
in vec3 f_norm;
in vec2 f_uv;
uniform layout(binding=0, rgba8) image3D image;
out vec4 fragment_color;
void main()
{
imageStore(image, ivec3(f_pos.xy*50 + vec2(100),0), vec4(1,0,1,1));
fragment_color = vec4(1,1,1,0);
}
Как бы это ни создавало действительно маленького дракона, полная текстура, которую я создал, выглядит следующим образом:
![enter image description here](https://i.stack.imgur.com/8rVVm.png)
Поэтому я попытался масштабировать дракона с меньшим коэффициентом, чтобы получить большее изображение, этооднако результат на следующем рисунке для коэффициента деления 3 (f_pos = v_pos[i]/3;
):
![enter image description here](https://i.stack.imgur.com/NeTQR.png)
Как вы можете видеть, большая часть дракона существует, но дыр много.
Я полагаю, это происходит потому, что некоторые вершины, вычисленные в геометрическом шейдере, заканчиваются за пределами (-1,1) допустимого диапазона координат и, таким образом, отбрасываются, создавая дыры.
есть ли способ указать шейдерам не сбрасывать вершины за пределами указанного диапазона во время растеризации?