glEnableVertexAttribArray究竟做了什么?

Min*_*wth 45 opengl

我一直在阅读:

http://alfonse.bitbucket.io/oldtut/Basics/Tut01%20Dissecting%20Display.html

我不太清楚这个功能是做什么的.
认为它可以使用给定的VBO,但我不确定.

我以为那就是做了什么glEnableClientState(GL_VERTEX_ARRAY).

Nic*_*las 32

我一直在阅读:http://alfonse.bitbucket.io/oldtut/Basics/Tut01%20Dissecting%20Display.html

那么请阅读下一页 ; 我准确地解释它在那里做了什么;)

如果我可以引用自己:

我们在顶点着色器中将position属性的属性索引指定为0,因此对glEnableVertexAttribArray(0)的调用将启用position属性的属性索引....如果未启用该属性,则在渲染期间不会使用该属性.

  • 'glEnableVertexAttribArray(0)启用位置属性的属性索引' - 不解释任何内容.为什么我们需要启用它以及何时启用它?我们调用glVertexAttribPointer - 指示ogl应该为着色器输入获取顶点或其他数据的位置,为什么我们需要调用这个附加函数?每次活动着色器程序改变时,我应该调用此方法,如果是顶点着色器? (32认同)
  • 那是我史诗般的失败。只是为了澄清:调用 glEnableVertexAttribArray(0) 可以在顶点着色器中使用索引 0 处的顶点属性。是否是位置属性无关紧要吧? (2认同)
  • @NicolBolas谢谢!我建议在主页面上添加一个更明确的源代码链接(约定似乎是使源链接非常明显); 我跳过那个介绍部分,认为它是编译器提示和环境设置,我不需要帮助. (2认同)
  • 也许我很慢,但是“启用属性索引”到底是什么意思?这是否仅仅意味着“位置”属性将从 VBO 中“馈送”数据?此状态是为 shder、VBO、VBA 或 OpenGL 上下文作为一个整体设置的吗?(否则你的书很棒顺便说一句) (2认同)
  • 这不是一个很好的解释."在渲染过程中不会使用它"是什么意思?访问它的着色器中的代码不会神奇地消失. (2认同)

Ngh*_*Bui 7

还有另一种为顶点属性指定数据的方法,即非数组方式:

克罗诺斯:glVertexAttrib

这样,我们只为一个顶点指定数据,该数据将被复制到所有顶点。

要使用非数组数据,请调用glDisableVertexAttribArray.

要使用数组数据,请调用glEnableVertexAttribArray.


Mar*_*ett 5

它类似于顶点数组,但存储每个点的额外值而不是它的坐标。例如,您可能想要存储建模应用程序中每个点的温度、密度、信号强度,或者可能是游戏的损坏值