gpt4 book ai didi

c++ - VBO 不绘制任何东西

转载 作者:行者123 更新时间:2023-11-30 02:00:18 29 4
gpt4 key购买 nike

我正在尝试在我的原生黑莓 10 应用程序中使用 VBO 绘制一个正方形。我的实现是,

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glGenBuffers(1,&decompressTileImage->VBOId);
glBindBuffer(GL_ARRAY_BUFFER,decompressTileImage->VBOId);
glBufferData(GL_ARRAY_BUFFER,sizeof(tileCoordList)+sizeof(tileTextureCoordList),0,GL_STATIC_DRAW);
glBufferSubData(GL_ARRAY_BUFFER,0,sizeof(tileCoordList),tileCoordList);
glBufferSubData(GL_ARRAY_BUFFER,sizeof(tileCoordList),sizeof(tileTextureCoordList),tileTextureCoordList);

glTexCoordPointer(3, GL_FLOAT, sizeof(tileTextureCoordList), (void*)sizeof(this->tileCoordList));
glVertexPointer(3, GL_FLOAT, sizeof(tileCoordList), 0);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisable(GL_BLEND);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);

swapBuffers();

这里的 tileCoordList 包含正方形的坐标,tileTextureCoordList 包含相应的纹理。 tileCoordList 是一个Square3D 类型的结构。

typedef struct
{
Vertex3D lowerLeft;
Vertex3D lowerRight;
Vertex3D upperLeft;
Vertex3D upperRight;
}Square3D;

typedef struct
{
GLfloat x;
GLfloat y;
GLfloat z;
} Vertex3D;

4 Vertex3D 表示 tileCoordList 中的一个正方形。 tileTextureCoordList 也是如此。不过,没有 VBO 我也能画得很好。我正在使用 opengl-es 1.1

另一个问题。

如果我创建两个 VBO。假设我用它的 id 绑定(bind)第一个并复制数据并绘制它。然后是第二个,我也绑定(bind)它并复制数据并绘制它。现在如果我想再次绘制第一个,我需要再次绑定(bind)它吗?如果我需要再次绑定(bind),是否还需要再次将数据复制到该 VBO 的缓冲区?

最佳答案

tileCoordListtileTextureCoordList 是指向 Square3D 结构的指针。

这意味着 sizeof 运算符将为您提供指针的大小,而不是结构的大小。

你可以使用例如

glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(*tileCoordList), tileCoordList);

相反。

关于c++ - VBO 不绘制任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15310777/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com