使用glVertexAttribPointer时,应该为gl_Normal属性使用什么索引
When using glVertexAttribPointer, what index should I use for the gl_Normal attribute?
我将正常数据缓冲到VBO,然后使用glVertexAttribPointer:指向它
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。
您没有。使用核心轮廓和VAO时,不存在任何固定函数顶点属性。
为着色器中的法线定义自己的顶点属性:
in vec3 myVertexNormal;
获取属性位置(或将其绑定到您选择的位置):
normalsLocation = glGetAttribLocation(program, "myVertexNormal");
然后使用位置为的glVertexAttribPointer
glVertexAttribPointer(normalsLocation, 3, GL_FLOAT, GL_FALSE, 0, NULL);
在核心配置文件中,还必须对位置、纹理坐标等执行此操作。OpenGL实际上并不关心数据是什么,只要顶点着色器为gl_Position
指定一些内容,片段着色器为其输出指定一些内容即可。
如果您坚持使用不推荐使用的固定函数属性和gl_Normal
,请改用glNormalPointer
。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- C++如何将同一类的实例作为属性
- 按多个属性排序
- 主函数参数的属性
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++删除未使用的类属性会导致 std::logic_error
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 使用内存地址访问结构的属性值
- C++调用具有 *this 属性的单个帮助程序函数
- C++ 在堆栈中包含多态属性的类对象存储
- C++ 命名参数习惯用语 - 未设置字符串属性
- 使用 CTRP 时,是否访问访问父构造函数 UB 中的子属性?