首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL stride

OpenGL stride
EN

Stack Overflow用户
提问于 2014-02-26 15:55:18
回答 2查看 216关注 0票数 0

我正在开发一个OpenGL 2.0渲染器(https://bitbucket.org/mattiascibien/anima-render),实际上我发现我根本不明白glVertexPointer()指令的方向是什么。实际上,我的代码如下所示

代码语言:javascript
复制
glBindBuffer(GL_ARRAY_BUFFER, data.vertex_buffer);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(
    3,
    GL_FLOAT,
    sizeof(GLfloat)*3,
    (void*)0
    );

但我实际上发现,通过阅读OpenGL文档,大步实际上应该是0。更改它不会改变模型的呈现方式。

什么价值是正确的?为什么改变这个参数没有什么区别?

编辑:数据存储在

代码语言:javascript
复制
std::vector<GLFloat>

同样的情况发生在使用glTexCoordPointer (GLfloat)*2或0

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。

票数 2
EN

Stack Overflow用户

发布于 2014-02-26 16:04:43

跨步是指从一个实体的开始到以下实体的开始的距离。0是特殊的:它意味着从一个实体的末尾到下一个实体的开头的距离是0。所以从根本上说,0和sizeof(实体)是一样的。

基本上,他们在一个参数中封装了两种不同的机制,我发现这是次优的。

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

https://stackoverflow.com/questions/22046561

复制
相关文章

相似问题

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