Opengl 在光栅化过程中是否会丢弃顶点?如果是,如何防止?

Opengl 在光栅化过程中是否会丢弃顶点?如果是,如何防止?,opengl,graphics,glsl,textures,voxel,Opengl,Graphics,Glsl,Textures,Voxel,我正在尝试创建斯坦福龙的二维像素化,稍后我将扩展到三维体素化 理想的输出如下所示: 此图像是使用以下几何体着色器生成的: #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; vo

我正在尝试创建斯坦福龙的二维像素化,稍后我将扩展到三维体素化

理想的输出如下所示:

此图像是使用以下几何体着色器生成的:

#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();
}
然而,这创造了一条真正的小龙,我创造的完整纹理如下所示:

因此,我尝试以较小的比例缩放龙,以生成更大的图像,但这会导致以下图像的分割因子为3(
f_pos=v_pos[I]/3;
):

正如你所看到的,大部分的龙都在那里,但是有很多洞

我认为发生这种情况是因为几何体着色器中计算的某些顶点结束于(-1,1)有效坐标范围之外,因此被丢弃,从而创建了孔


是否有方法指示着色器在光栅化期间不丢弃所述范围之外的顶点?

着色器不丢弃顶点;这个这是渲染工作原理的一个基本部分,如果不方便,您不能简单地将其关闭


您必须生成剪辑空间范围内的基本体。如果希望获得更大剪辑空间的效果,则必须在光栅化之前缩小大小,并在片段着色器中反转缩放。

着色器不会丢弃顶点;这个这是渲染工作原理的一个基本部分,如果不方便,您不能简单地将其关闭

您必须生成剪辑空间范围内的基本体。如果希望获得更大剪辑空间的效果,则必须在光栅化之前缩小大小,并在片段着色器中反转缩放

#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);
}