【发布时间】:2018-05-21 19:44:43
【问题描述】:
我正在尝试创建斯坦福龙的 2D 像素化,稍后我将扩展到 3D 体素化。
理想的输出如下所示:
此图像是使用以下几何着色器生成的:
#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);
}
虽然这会创建一条非常小的龙,但我创建的完整纹理如下所示:
因此,我尝试将龙缩放一个较小的因子以制作更大的图像,但这会导致以下图像的除法因子为 3 (f_pos = v_pos[i]/3;):
如你所见,大部分龙都在那里,但有很多洞。
我相信这是因为几何着色器中计算的一些顶点超出了 (-1,1) 有效坐标范围,因此被丢弃,从而产生了孔。
有没有办法指示着色器在光栅化期间不要丢弃所述范围之外的顶点?
【问题讨论】:
标签: opengl graphics glsl textures voxel