首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用glVertexAttribPointer时,我应该为gl_Normal属性使用什么索引?

问当使用glVertexAttribPointer时,我应该为gl_Normal属性使用什么索引?
EN

Stack Overflow用户
提问于 2016-03-27 16:58:19
回答 1查看 483关注 0票数 0

我将正常数据缓冲到VBO,然后使用glVertexAttribPointer指向它:

代码语言:javascript
复制
glVertexAttribPointer(<INDEX?>, 3, GL_FLOAT, GL_FALSE, 0, NULL);

但是,如果我希望数据绑定到着色器中的gl_Normal属性,那么应该为第一个参数索引使用什么值?

我使用的是NVidia卡,我在这里读到https://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/attributes.php,对于这些类型的卡片,gl_Normal总是位于索引2。但是我怎么知道gl_Normal在其他卡的索引上呢?

此外,使用索引2似乎不起作用,着色器中的gl_Normal数据都是(0,0,0)。

我知道glGetAttribLocation和glBindAttribLocation,但是文档特别指出,如果尝试使用以'gl_‘开头的内置顶点属性之一,该函数将引发错误。

编辑:使用OpenGL 3.0与GLSL 130。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-27 17:21:41

当使用核心配置文件和VAOs时,不存在任何固定函数顶点属性.

为着色器中的法线定义自己的顶点属性:

代码语言:javascript
复制
in vec3 myVertexNormal;

获取属性位置(或将其绑定到您选择的位置。):

代码语言:javascript
复制
normalsLocation = glGetAttribLocation(program, "myVertexNormal");

然后将glVertexAttribPointer与位置一起使用:

代码语言:javascript
复制
glVertexAttribPointer(normalsLocation, 3, GL_FLOAT, GL_FALSE, 0, NULL);

在核心配置文件中,您还必须对位置、纹理坐标等进行此操作。OpenGL实际上并不关心数据是什么,只要顶点着色器为gl_Position分配一些东西,而片段着色器为它的输出分配一些东西。

如果您坚持使用不推荐的固定函数属性和gl_Normal,则使用glNormalPointer代替。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36250075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档