【问题标题】:Is there a substitute for glPolygonMode in Open GL ES/WebGL?Open GL ES/WebGL 中有 glPolygonMode 的替代品吗?
【发布时间】:2011-04-02 03:19:13
【问题描述】:

我想以线框模式创建游戏,但是如果没有 glPolygoneMode 命令,我不知道该怎么做。我可以用可用的东西自己编码吗?我对opengl完全陌生。如果有人这样做并且有代码 sn-p 我很乐意看到它。任何帮助表示赞赏。

【问题讨论】:

    标签: 3d opengl-es wireframe webgl


    【解决方案1】:

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

    但是,如果您有 Geometry Shaders 可用(不过,似乎 WebGL 不支持它们,OpenGL ES 应该从 3.2 开始,就像 desptop 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();
        }
    }
    

    如果您使用正确的基于块的着色器接口,您应该能够将现有的顶点和片段着色器用于其余部分,只需将几何着色器连接到它们之间,即可为基于三角形的图元进行各种线框渲染。

    【讨论】:

    • Stack Overflow 应该有一种机制来将此标记为正确答案。
    【解决方案2】:

    可以想象,您可以使用 GL_LINES 渲染整个场景

    【讨论】:

    • 这...有点简洁,考虑到仅将 GL_TRIANGLES 替换为 GL_LINES 肯定不会起到作用,而且比这更复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多