Я пытаюсь создать ландшафт из карты высот в OpenGL (C ++), и следующие этот урок.
Я также пытаюсь использовать объект буфера вершин, чтобы ускорить его. В их примере они создают объект вершины с 3 числами с плавающей запятой для x, y, z. Затем они передают указатель на массив этих объектов вершин, которые будут скопированы в буферный объект. Чего я не понимаю, так это того, что для размера параметра буфера они передают ему размер 3-х чисел (умноженный на количество вершин).
Конечно, объекты вершин, передаваемые ему, больше, чем просто размер 3-х чисел? Функция glBufferDataARB каким-то образом извлекает эти переменные? Размер объекта равен размеру переменных в нем? или я что-то упустил?
VBOs хранят байты. Потом gl*Pointer()
и / или glVertexAttrib()
вызовы говорят OpenGL, как интерпретировать эти байты.
Для хранения трех поплавков вам нужно sizeof(float) * 3
байт.
Хранить N
три вершины с плавающей запятой, которые вам нужны sizeof(float) * 3 * N
байт.
Других решений пока нет …