Получение данных из вектора в std :: map

Я пытаюсь написать класс, который рендерит модели из файлов .3ds, и столкнулся с действительно раздражающей проблемой. У меня есть отображение карты от целых чисел к векторам двойников

map<int, vector<double> >

что я использую для отображения вершин, которые имеют разные свойства материала. После этого я пытаюсь перебрать все ключи и сделать так, чтобы OpenGL отображал их так:

glPushMatrix();
glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

for(map<int, vector<double> >::iterator iter = myMaterialVertices.begin(); iter != myMaterialVertices.end(); iter++)
{
vector<double> test = iter->second;
glVertexPointer(3, GL_DOUBLE, 0, test.data());
//get the texture coords here
glDrawArrays(GL_TRIANGLES, 0, iter->second.size() / 3);
}

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glPopClientAttrib();
glPopMatrix();

К сожалению, это дает мне ошибку при вызове glDrawArrays каждый раз, сообщая мне, что я пытаюсь прочитать адрес 0. Я интерпретировал это как означающее, что была проблема с нулевым указателем, поэтому я вставил тестовый вектор, чтобы убедиться, что данные были там , Вектор загружается правильно, но все равно выдает ту же ошибку. Что я делаю неправильно?

1

Решение

Так как это было предложено в комментариях, я поставлю ответ. Призыв к

glEnableClientState(GL_TEXTURE_COORD_ARRAY);

заставляет OpenGL ожидать указатель на массив текстурных координат. Когда ничего не было указано, выдается исключение нулевого указателя (попытка прочитать 0x00000000). Урок здесь не включает состояния клиента, если вы не планируете определить соответствующий указатель.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector