Я пытаюсь загрузить объект и использовать VBO и glDrawArrays () для его рендеринга. Проблема в том, что простой указатель типа float f[]={...}
не работает в моем случае, потому что я передал предел значений, которые может хранить этот указатель. Поэтому я решил использовать вектор. И это не работает …
Вот мой код:
unsigned int vbo;
vector<float*> 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);
У меня проблемы с glBufferData()
где третий параметр const GLvoid *data
, Я прохожу &vert
но это не работает
Ты хочешь сделать:
unsigned int vbo;
vector<float> 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 ++ 11 или vert.data
не скомпилируется.
Если вы посмотрите на std::vector
док ты что std::vector::data()
помечен с C ++ 11.
http://www.cplusplus.com/reference/vector/vector/data/
Если у вас нет C ++ 11, вы можете сделать следующее:
unsigned int vbo;
vector<float> 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(), &vert[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
Взяв ссылку на первый элемент вектора, вы получите указатель на сами данные.