Мой предыдущий комментарий: вы хотите sizeof(Vector3f) * size
, а не sizeof(Vertices)
, то есть размер данных в байтах, в вашем вызове glBufferData
.
1/. Использование: Vector3f *vertices = new Vector3f[size];
vertices
- это указатель на массив Vector3f (с подходящим дополнением между элементами, если требуется, заданным sizeof(Vector3f)
. Каждый элемент Vector3f
создается с использованием конструктора Vector3f
по умолчанию.
2/. Рассмотрите возможность управления своими данными с помощью: std::vector<Vector3f> vertices (size);
— чтобы вы могли управлять и работать с вектором strong> вместо управления указателями. Поскольку данные std::vector имеют непрерывный доступ, вы можете использовать:
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(Vector3f), vertices.data(), GL_STATIC_DRAW);
Если вы измените размер контейнера вершин (Vector3f), вы позволите std::vector<>::size()
позаботиться о количестве элементов.
Очевидно, что вам не нужно явное delete
здесь. Как только контейнер Vector3f выходит за пределы области действия, он автоматически уничтожается. Я даже не коснулся всех преимуществ универсальных функций, которые могут работать с контейнером... слияние, реверсирование, сортировка... всего несколько вещей, которые вы получаете бесплатно.
person
Brett Hale
schedule
17.01.2015