OpenGL中的线框

时间:2011-02-17 18:21:57

标签: opengl

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

3 个答案:

答案 0 :(得分:17)

glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );

填充它...你想要行。

编辑: 请记住,完成后你总是可以把它重新填满,比如

glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
 // add polygons here
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );

答案 1 :(得分:3)

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

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

varying float vertexID; # in GLSL <= 3, or
out float vertexID;     # in GLSL 4

并为其分配内置的gl_VertexID:

vertexID = (float)gl_VertexID;

这样,你就可以从片段着色器访问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
}

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

答案 2 :(得分:2)

您的问题不明确,但我想您要渲染填充多边形和线框。事实证明,这并非如此微不足道。解决问题的经典方法是:

glPolygonMode( ... GL_FILL);
draw();
glPolygonOffset( param1, param2 );
glPolygonMode( ... GL_LINE );
draw();

但这并非没有问题,例如找出传递给glPolygonOffset等的值。