Я прочитал высоко и низко и подумал, что понимаю макеты данных вершин в C ++ и OpenGL, но я где-то ошибаюсь ...
У меня есть структура для создания объекта Line. Следовательно, у него есть две точки (каждая из 3-х чисел, представляющих векторную позицию). Он также должен иметь идентификатор объекта, чтобы позволить мне отслеживать конкретный объект при создании на предмет столкновений и т. Д. Позже в приложении. Структура показана ниже.
struct Point
{
Vector position = { 0.0f, 0.0f, 0.0f };
};
struct Line
{
Point B = { 0.0f,0.0f,0.0f };
Point C = { 0.0f,0.0f,0.0f };
int ID = 0;
};
Затем я создаю STL-вектор simpe c ++ STL и отодвигаю два линейных объекта:
vector<Line> lines;
Line w0;
w0.B = { 2.0f,2.0f, 0.0f };
w0.C = { 8.0f,2.0f, 0.0f };
w0.ID = 0;
lines.push_back(w0);
Line w1;
w1.B = { 10.0f,4.0f, 0.0f };
w1.C = { 18.0f,4.0f, 0.0f };
w1.ID = 1;
lines.push_back(w1);
Далее я указываю glVertexAttribPointer следующим образом:
glVertexAttribPointer(4, 3, GL_FLOAT, GL_FALSE, 0, (void*)(0));
glEnableVertexAttribArray(4);
Это дает рисовать только 1 линию, а не две, для которых я создаю объекты (!). Если я удаляю переменную ID int из моей структуры, обе строки отображаются правильно.
Позже выяснилось, что, возможно, я неправильно указал glVertexAttribPointer, поэтому я изменил его логически следующим образом:
glVertexAttribPointer(4, 3, GL_FLOAT, GL_FALSE, sizeof(Line), (void*)offsetof(Line, B));
Затем он нарисовал только 1 линию в совершенно разных координатах! Различные комбинации смещений и т. Д. Не помогли. Могу ли я в конечном итоге использовать значение типа int, отличное от остальной части структуры, и передавать только плавающие значения в OpenGL? Мне действительно нужен идентификатор объекта и использовать его позже в приложении. Должен быть способ - я должен что-то упустить .. пожалуйста, помогите.