glPolygoneMode(GL_FRONT_AND_BACK, GL_FILL)
已开启,如何在这种情况下获得线框?有没有办法在没有切换多边形模式的情况下获得线框渲染到GL_LINE
?
答案 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
等的值。