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
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, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

pro.graphon (and gamedev)
pro.graphon (and gamedev)
389 участник(ов)

Обсуждаем стандарты консорциума Khronos: OpenGL, OpenCL и пр., предлагаем различные работы, туторы, интересные материалы по этим стандартам (и помечаем их тегами). Правила чата и инфо по системе тегов – /rules. Реклама только по согласованию с @AlexFails.

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest