在Open GL ES / WebGL中是否可以替代glPolygonMode?

时间:2010-08-21 22:09:28

标签: 3d opengl-es wireframe webgl

我想在线框模式下创建游戏但是没有glPolygoneMode命令我不知道怎么做。这是我能用可用的东西编码的东西吗?我对opengl完全不熟悉。如果有人这样做并且有代码片段,我很乐意看到它。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

可以想象,您可以使用GL_LINES

渲染整个场景

答案 1 :(得分:2)

不幸的是,您可能实际上必须完全将几何转换为线图元并使用GL_LINES 进行渲染。但是,这当然不能通过在绘制调用中简单地用GL_TRIANGLES替换GL_LINES(或其他任何东西)来完成,您将不得不完全重新排列顶点以适应新的原始模式。这要求您至少在glDrawElements...调用中使用不同的索引数组,或者,对于非索引渲染(glDrawArrays...),至少要使用不同的顶点数组(尽管如果您确实选择这样做,则可能是时候改用索引图纸了。

但是,如果您有Geometry Shaders可用(尽管WebGL似乎不支持它们,则OpenGL ES从3.2开始就应该如此,而desptop GL也应该如此,但是无论如何都具有良好的旧glPolygonMode),并且尚未将它们用于其他用途,事情会变得更加容易。在这种情况下,您只需在顶点和片段处理之间安装一个相当简单的 geometry着色器,该着色器将获取三角形并为其输出3条线

layout(triangles) in;
layout(line_strip, max_vertices=4) out;

void main()
{
    for(int i=0; i<4; ++i)
    {
        // and whatever other attributes of course
        gl_Position = gl_in[i%3].gl_Position;
        EmitVertex();
    }
}

如果使用适当的基于块的着色器接口,则应该可以将现有的顶点和片段着色器用于其余部分,而只需将几何着色器挂在它们之间即可对基于三角形的图元进行各种线框渲染。