OpenGL中的线框

inf*_*fra 3 opengl

glPolygoneMode(GL_FRONT_AND_BACK, GL_FILL)是ON,如何在这种情况下获得线框?有没有办法在没有开关多边形模式的情况下获得线框渲染GL_LINE

cor*_*iKa 18

glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
Run Code Online (Sandbox Code Playgroud)

填充它...你想要线条.

编辑:记住,完成后你可以随时把它重新填充,就像这样

glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
 // add polygons here
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
Run Code Online (Sandbox Code Playgroud)

  • @infra关心解释为什么不呢? (2认同)

Cal*_*602 5

从你的问题来看,我假设你有一些巨大的中间件,并且只能访问着色器,对吗?

在这种情况下,在顶点着色器中创建一个名为 vertexID 的变量:

varying float vertexID; # in GLSL <= 3, or
out float vertexID;     # in GLSL 4
Run Code Online (Sandbox Code Playgroud)

并为其分配内置的 gl_VertexID :

vertexID = (float)gl_VertexID;
Run Code Online (Sandbox Code Playgroud)

这样,您就可以从片段着色器访问 gl_VertexID,但是是插值的!这很好,因为例如,一个顶点有 2 个,相邻顶点有 3 个,中间有 2.5 个。

因此,您只需检查 vertexID 是否接近 2(或 3):如果是,则您接近边缘。这对于可视化和调试来说应该足够了。

in float vertexID; # or
varying float vertexID;

// blabla

if (fract(vertexID) < 0.1){
    outcolor = vec4(1,0,0,0); # in glsl 4
}
Run Code Online (Sandbox Code Playgroud)

请注意,这样您只能得到每个三角形的 2 条边。也许有些会非常薄(如果一个顶点 ID 是 2,另一个顶点 ID 是 1000,则 0.1 区域很小)。