首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用VBO中的stride参数?

如何使用VBO中的stride参数?
EN

Stack Overflow用户
提问于 2011-07-10 22:13:39
回答 1查看 877关注 0票数 1

我在理解如何使用一个带有3个不同数据的缓冲区时遇到了问题,我有以下结构用于我的vert,text,color数据:

代码语言:javascript
复制
struct xyzf {
    float x, y, z;
};
struct xyf {
    float x, y;
};

struct vertype {
    xyzf points[4];
};
struct textype {
    xyf points[4];
};
struct coltype {
    GLuint points[4];
};

struct buftype {
    vertype vertex;
    textype texcoord;
    coltype color;
};

然后我(试着)以下面的方式使用它(这对我来说最有意义):

代码语言:javascript
复制
glBindBufferARB(GL_ARRAY_BUFFER, mybufid);
glVertexPointer(3, GL_FLOAT, sizeof(buftype), 0);
glTexCoordPointer(2, GL_FLOAT, sizeof(buftype), (GLvoid *)sizeof(vertype));
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(buftype), (GLvoid *)(sizeof(vertype)+sizeof(textype)));

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);

glDrawArrays(GL_QUADS, 0, indices);

glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);

glBindBufferARB(GL_ARRAY_BUFFER, 0); // unbind

但它失败了,而且它呈现了一些其他东西,而不是我将步幅和指针都设置为零所得到的东西。当我这样做的时候,我得到了正确的顶点数据,但文本/颜色仍然不正确。

我不能在glVertexPointer()等函数中对最后一个参数使用&data.vertex,因为我已经没有数据了,因为我使用的是VBO,这个方法只适用于顶点数组。

我也不确定glDrawArrays()的计数值是如何工作的,我读到的文档说它是索引,所以一个四元组应该有4,对吧?但是当我将四边形的数量乘以4时,它只渲染了我一半的顶点,这是怎么回事?(如果我乘以8...,它会将它们全部渲染出来)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-10 22:21:06

看起来你是在按四边形交错你的数据,但你应该按顶点交错(至少这是通常的做法)。

如果您将顶点布局更改为以下内容,代码应该是正确的:

代码语言:javascript
复制
xyz
uv
rgba
xyz
uv
rgba
xyz
uv
rgba
xyz
uv
rgba

而不是

代码语言:javascript
复制
xyzxyzxyzxyz
uvuvuvuv
rgbargbargbargba
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6641573

复制
相关文章

相似问题

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