【问题标题】:OpenGL ES: Do vertex structs need x, y, AND z?OpenGL ES:顶点结构是否需要 x、y 和 z?
【发布时间】:2016-11-30 05:32:20
【问题描述】:

这可能是一个愚蠢的问题,但我一直在想——OpenGL 中的顶点结构是否需要有 x、y 和 z?我在 2D 中绘图,但我见过的所有教程似乎在其结构中都有一个 z 变量,即使它始终为 0。这不会减慢渲染速度吗?

此外,它们似乎总是有 r、g、b 和 a 作为颜色变量,但我不需要 alpha,因为它在我的项目中始终为 1。我真的需要每次都说它是 1 吗?

我只是想知道,因为 glVertexAttribPointer 允许您将第二个参数设置为任何值,并且我尝试将其设置为 2,因为我只使用 x 和 y,并且它起作用了。

【问题讨论】:

    标签: ios swift opengl-es vertex vertex-array


    【解决方案1】:

    来自spec 2.8 节:

    如果 size 为 1,则属性的 x 分量由数组指定; y、z 和 w 分量分别隐式设置为零、零和一。如果 size 为 2,则属性的 x 和 y 分量由数组指定; z 和 w 分量分别隐式设置为零和一。如果 size 为 3,则指定 x、y 和 z,并且 w 隐式设置为 1。如果 size 为 4,则指定所有组件。

    因此,如果您没有为 2D 顶点定义 z 或 w。顶点汇编器自动用 z=0,w=1 填充它们。您的代码是安全且正确的。

    RGBA 与 XYZW 相同,因此假设您希望 alpha 为 1,您不必为颜色分量指定 alpha。

    在性能方面,您通常应该期望通过使用更小的顶点组件来取得胜利,因为需要移动和复制到 GPU 的数据更少。我预计任何性能提升都是微小的,并且可能无法衡量。

    一个例外是,如果您从一个顶点中删除几个字节并将其从一个很好的缓存友好的每个顶点 16 字节减少到每个顶点 12 字节,您可能会稍微降低性能,因为 8、16、32 字节大小就内存访问而言,这是一个神奇的数字。同样,这里的任何性能损失都是微小的,所以我不会让它给你带来麻烦。

    【讨论】:

      【解决方案2】:

      如果您删除了 z,您不会注意到改进,因为 OpenGL 仍会进行 3D 渲染,尽管您只是将它用于 2D 渲染。但是,您会获得记忆。因此,您可以删除 z 并让 glVertexAttribPointer 的第二个参数为 2,但请注意如何在着色器中操作向量。

      这可能被认为是过度优化,但如果您愿意,您可以禁用深度渲染,这样对象将按照设置期间调用glDisable (GL_DEPTH_TEST) 的渲染顺序从后到前渲染。 In openGL, how can you get items to draw back to front?

      对于非透明图像,可以将其作为 GL_RGB 类型加载到 GPU:

      glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, each.w, each.h, 0, GL_RGB, GL_UNSIGNED_BYTE, each.image)
      

      【讨论】:

        【解决方案3】:

        是的,总是需要一个 Z,它是一个 3D 渲染器,当你在做 2D 的东西时,你只是在利用 3D 渲染器来做 2D(使用正交投影而不是透视),你仍然可以使用 Z 来确定对象位于其他对象之上,这是有用的。据我所知,着色器中的 gl_Position 变量实际上是一个 vec4,所以它会有一个 Z 和 W 分量,我想如果你使用的是 vec2 所以只有 X 和 Y,Z 和 W 将获得默认值或您必须在着色器中将其转换为 vec4,我不记得了。

        【讨论】:

        • 我认为OP是通过glVertexAttribPointer询​​问输入顶点是否需要z,但您正在回答着色器是否需要编写gl_Position的z分量。
        • @Columbo 是的,好点,我想我有点错过了情节。你的答案更准确
        猜你喜欢
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多