gpt4 book ai didi

opengl-es - 通过 glVertexAttribPointer 传递的组件比着色器预期的要少

转载 作者:行者123 更新时间:2023-12-02 17:33:44 28 4
gpt4 key购买 nike

在 OpenGL(特别是本例中的 ES 2.0)中,如果我为每个顶点传递 2 个组件,会发生什么,如下所示:

  glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, sizeof( MyVertexStruct ), pPos );

...但是着色器需要三个?

似乎将第三个(在本例中为 Z)分量默认为 0,这正是我想要的,但我对是否依赖该行为犹豫不决。这是在 OpenGL、ES 或 GLSL 标准中定义的吗?

(我的搜索功能失败了:在红皮书、紫皮书或 khronos.org 引用页中找不到任何内容,但我可能只是忽略了它。)

最佳答案

虽然我没有在 OpenGL 规范中查找它,但我很确定它是定义的行为,如果它的组件较少​​,每个属性都会扩展为 (0,0,0,1),因为它是在使用单属性函数时也这样做,例如 glVertexAttrib2f (这确实是由标准指定的)。

编辑:我在 OpenGL ES 2.0 规范中查找了它,它说:

When an array element i is transferred to the GL by the DrawArrays or DrawElements commands, each generic attribute is expanded to four components. If size is one then the x component of the attribute is specified by the array; the y, z, and w components are implicitly set to zero, zero, and one, respectively. If size is two then the x and y components of the attribute are specified by the array; the z, and w components are implicitly set to zero, and one, respectively. If size is three then x, y, and z are specified, and w is implicitly set to one. If size is four then all components are specified.

所以这确实像你我想象的那样。

关于opengl-es - 通过 glVertexAttribPointer 传递的组件比着色器预期的要少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102876/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com