在Open GL ES/WebGL中是否有glPolygonMode的替代方法?

10

我希望在线框模式下创建一个游戏,但是没有glPolygonMode命令,不知道如何实现。是否可以使用现有的内容自己编写代码?我完全不了解opengl。 如果有人已经做过这个并且有代码片段,我很想看到它。 感谢任何帮助。

2个回答

14
很不幸,你可能需要完全将几何图形转换为线性基元,并使用GL_LINES进行渲染。然而,这当然不是通过在绘制调用中简单地用GL_LINES(或其他任何东西)替换GL_TRIANGLES来完成的,你将不得不完全重新排序顶点以适应新的基元模式。这要求你至少在glDrawElements...调用中使用不同的索引数组,或者对于非索引渲染(glDrawArrays...),完全使用不同的顶点数组(尽管如果你真的选择这样做,这可能是切换到索引绘图的正确时机)。
然而,如果你有几何着色器可用(尽管它似乎不支持WebGL,OpenGL ES应该支持3.2,桌面GL也是如此,但那里有好老的glPolygonMode),并且没有为其他事情使用它们,事情就会变得更容易。在这种情况下,你只需在顶点和片段处理之间安装一个相当简单的几何着色器,它将三角形作为输入并输出每个三角形的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();
    }
}

如果您使用适当的基于块的着色器接口,您应该能够使用现有的顶点和片段着色器,并在它们之间挂接几何着色器来进行所有种类的三角形基元线框渲染。

2
Stack Overflow 应该有一个机制来标记这个答案为正确答案。 - bikeman868

3

理论上你可以使用GL_LINES来渲染整个场景。


7
考虑到仅仅将GL_TRIANGLES替换成GL_LINES肯定是行不通的,这句话有点过于简洁了,实际情况更为复杂。 - Christian Rau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接