Dieser Code funktioniert wie es angenommen hat, zu arbeiten, macht richtig (nicht jedes Stück zugehörigen Code schreiben, da ich mit diesen Teilen etwas falsch ist denken):C++ VBO Rendering-Ausgabe
std::vector<GLuint> vboId;
std::vector< std::vector<GLfloat> > verts;
... init:
verts[num].push_back(x);
verts[num].push_back(y);
//verts[num].push_back(0);
// texture offset
verts[num].push_back(0);
verts[num].push_back(offset);
verts[num].push_back(x + TILE_SIZE);
verts[num].push_back(y);
//verts[num].push_back(0);
// texture offset
verts[num].push_back(1);
verts[num].push_back(offset);
verts[num].push_back(x + TILE_SIZE);
verts[num].push_back(y + TILE_SIZE);
//verts[num].push_back(0);
// texture offset
verts[num].push_back(1);
verts[num].push_back(offset + zsize);
verts[num].push_back(x);
verts[num].push_back(y + TILE_SIZE);
//verts[num].push_back(0);
// texture offset
verts[num].push_back(0);
verts[num].push_back(offset + zsize);
...
glBindBuffer(GL_ARRAY_BUFFER, vboId[num]);
glBufferData(GL_ARRAY_BUFFER, verts[num].size() * sizeof(GLfloat), verts[num].data(), GL_STATIC_DRAW);
... machen:
glBindBuffer(GL_ARRAY_BUFFER,vboId[num]);
glTexCoordPointer(2,GL_FLOAT,sizeof(verts[num]),(void*)(sizeof(GLfloat)*2));
glVertexPointer(2,GL_FLOAT,sizeof(verts[num]),0);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_QUADS, 0, verts[num].size());
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
Aber wenn ich versuche, durch Änderung des Code, alles rende Z-Wert hinzufügen rs verkorkste:
... init
verts[num].push_back(x);
verts[num].push_back(y);
verts[num].push_back(0);
// texture offset
verts[num].push_back(0);
verts[num].push_back(offset);
verts[num].push_back(x + TILE_SIZE);
verts[num].push_back(y);
verts[num].push_back(0);
// texture offset
verts[num].push_back(1);
verts[num].push_back(offset);
verts[num].push_back(x + TILE_SIZE);
verts[num].push_back(y + TILE_SIZE);
verts[num].push_back(0);
// texture offset
verts[num].push_back(1);
verts[num].push_back(offset + zsize);
verts[num].push_back(x);
verts[num].push_back(y + TILE_SIZE);
verts[num].push_back(0);
// texture offset
verts[num].push_back(0);
verts[num].push_back(offset + zsize);
...
glBindBuffer(GL_ARRAY_BUFFER, vboId[num]);
glBufferData(GL_ARRAY_BUFFER, verts[num].size() * sizeof(GLfloat), verts[num].data(), GL_STATIC_DRAW);
... machen:
glBindBuffer(GL_ARRAY_BUFFER,vboId[num]);
glTexCoordPointer(2,GL_FLOAT,sizeof(verts[num]),(void*)(sizeof(GLfloat)*3));
glVertexPointer(3,GL_FLOAT,sizeof(verts[num]),0);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_QUADS, 0, verts[num].size());
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
Kann jemand erklären, was ich falsch hier? Warum funktionieren die ersten Codes, aber die letzten nicht?
von BEPS geschrieben hinzufügen, bearbeiten von KEBS – plasmacel