OpenGL: использование VBO с std :: vector

Я пытаюсь загрузить объект и использовать VBO и glDrawArrays() для его рендеринга. Проблема в том, что простой мой указатель float, такой как float f [] = {...} , не работает в моем случае, потому что я передал предел значений, которые может хранить этот указатель. Поэтому я решил использовать вектор. И это не работает ...

Вот мой код:

unsigned int vbo;
vector vert;

...
vert.push_back(new float(i*size));
vert.push_back(new float(height*h));
vert.push_back(new float(j*size));
...

glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vert), &vert, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

и сделать:

glBindBuffer(GL_ARRAY_BUFFER, vbo);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
glDisableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);

I'm having problem on the glBufferData() where the 3rd parameter is const GLvoid *data. I'm passing &vert but It's not working.

2
добавлено отредактировано
Просмотры: 2
nl ja de

2 ответы

Вы хотите сделать:

unsigned int vbo;
vector vert;

...
vert.push_back(i*size);
vert.push_back(height*h);
vert.push_back(j*size);
...

glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vert.size() * sizeof(float), vert.data(), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

Всегда полезно прочитать документацию . Кроме того, я бы предложил вам собрать хорошую книгу на C ++, которая, вероятно, была бы хорошим способом избежать ошибок, подобных этим.

13
добавлено
Лучше использовать vert.size() * sizeof (float) для параметра размера для лучшей переносимости.
добавлено автор Kevin, источник
@Kevin На самом деле просто использование vert.size() не работает вообще. Будет показано только 1/4 VBO
добавлено автор KaareZ, источник
Большое спасибо.
добавлено автор Tiago Salzmann, источник
4
добавлено
Пробовали ли вы & vert [0] ? Какой компилятор вы используете? Перед C ++ 11 весь мой код использует эту форму и отлично работает.
добавлено автор McLeary, источник
Я уже пробовал, но это не сработало. Но у меня есть C ++ 11, поэтому data </​​code> было решением
добавлено автор Tiago Salzmann, источник
О, я нашел решение. Правильный способ сделать это: vert.data() или & (vert [0]) . & vert [0] не работает для меня
добавлено автор Tiago Salzmann, источник