Я рисую круг, это мой код для извлечения данных для круга.
// Vertices
data.push_back(0.0f);
data.push_back(0.0f);
data.push_back(0.0f);
// Normal
data.push_back(0.0f);
data.push_back(0.0f);
data.push_back(1.0f);
// Texture Coord
data.push_back(0.5f);
data.push_back(0.5f);
for (int i = 0; i < iSegments + 1; i++)
{
// float angle = 2.0f * M_PI * i / iSegments;
float initialAngle = startAngle * (M_PI / 180);
float angle = initialAngle + ((angleCircle *( M_PI / 180)) * i / iSegments);
// vertex data
float x, y, z ,tx,ty ,tz;
x = cos(angle) * 50.0;
y = sin(angle) * 50.0;
z = 0.0;
tx = cos(angle) * 0.5 + 0.5f;
ty = sin(angle) * 0.5 + 0.5f;
data.push_back(x);
data.push_back(y);
data.push_back(z);
data.push_back(0.0f);
data.push_back(0.0f);
data.push_back(1.0f);
data.push_back(tx);
data.push_back(ty);
}
glGenVertexArrays(1, &m_VAO);
glGenBuffers(1, &m_VBO);
glBindVertexArray(m_VAO);
glBindBuffer(GL_ARRAY_BUFFER, m_VBO);
glBufferData(GL_ARRAY_BUFFER, data.size() * sizeof( float ) , &data[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float)));
glBindVertexArray(0);
//glEnableVertexAttribArray(0);
isInited = true;
, если я хочу нарисовать еще один круг, где только разница в данных будет положением z этого круга, который был бы на уровне 50,0 вместо 0,0.
Нужно ли создавать новые VAO и VBO для новых данных или я могу обновить существующие данные в объекте VBO?