我正在开发一个OpenGL 2.0渲染器(https://bitbucket.org/mattiascibien/anima-render),实际上我发现我根本不明白glVertexPointer()指令的方向是什么。实际上,我的代码如下所示
glBindBuffer(GL_ARRAY_BUFFER, data.vertex_buffer);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(
3,
GL_FLOAT,
sizeof(GLfloat)*3,
(void*)0
);但我实际上发现,通过阅读OpenGL文档,大步实际上应该是0。更改它不会改变模型的呈现方式。
什么价值是正确的?为什么改变这个参数没有什么区别?
编辑:数据存储在
std::vector<GLFloat>同样的情况发生在使用glTexCoordPointer (GLfloat)*2或0
发布于 2014-02-26 16:04:43
https://www.opengl.org/sdk/docs/man2/xhtml/glInterleavedArrays.xml给出了更多关于它的信息。
如果stride为0,则聚合元素将连续存储。否则,在一个聚合数组元素的开始和下一个聚合数组元素的开始之间会出现跨步字节。
当您提供一个大步时,即0或您的"struct“大小(3* size or (GLFloat))--这是相同的。但在这种情况下,我会选择0。
发布于 2014-02-26 16:04:43
跨步是指从一个实体的开始到以下实体的开始的距离。0是特殊的:它意味着从一个实体的末尾到下一个实体的开头的距离是0。所以从根本上说,0和sizeof(实体)是一样的。
基本上,他们在一个参数中封装了两种不同的机制,我发现这是次优的。
https://stackoverflow.com/questions/22046561
复制相似问题