Совсем недавно я добился больших успехов в работе с объектами буфера вершин. Итак, я перешел к массивам элементов и подумал, что с такой реализацией я могу затем загружать данные вершин и граней из объекта.
Я не слишком хорошо разбираюсь в чтении файлов на С++, поэтому я написал документ на Python, чтобы проанализировать объект и написать 2 отдельных txts, чтобы получить массив вершин и индексы граней, и вставить их прямо в мой код. Это похоже на 6000 строк, но работает (без ошибок компиляции). И вот как это выглядит
.
Я думаю, что они ошибаются. Я не уверен. Порядок вершин и граней не изменяется только после извлечения из объекта, потому что у меня еще нет нормалей или текстур, работающих с буферными объектами. Мне нравится, если вы посмотрите на куб, но не совсем.
Вот код рендеринга
void Mesh_handle::DrawTri(){
glBindBuffer(GL_ARRAY_BUFFER,vertexbufferid);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,elementbufferid);
int index1=glGetAttribLocation(bound_program,"inputvertex");
int index2=glGetAttribLocation(bound_program,"inputcolor");
int index3=glGetAttribLocation(bound_program,"inputtexcoord");
glEnableVertexAttribArray(index1);
glVertexAttribPointer(index1,3,GL_FLOAT,GL_FALSE,9*sizeof(float),0);
glEnableVertexAttribArray(index2);
glVertexAttribPointer(index2,4,GL_FLOAT,GL_FALSE,9*sizeof(float),(void*)(3*sizeof(float)));
glEnableVertexAttribArray(index3);
glVertexAttribPointer(index3,2,GL_FLOAT,GL_FALSE,9*sizeof(float),(void*)(7*sizeof(float)));
glDrawArrays(GL_TRIANGLE_STRIP,0,elementcount);
//glDrawElements(GL_TRIANGLE_STRIP,elementcount,GL_UNSIGNED_INT,0);
}
Мой синтаксический анализатор Python, который просто записывает информацию в файл: источник
Объект — Эзреаль из League of Legends.
Я не уверен, то ли я неправильно читаю лица, то ли они даже не такие, какими я их представлял. Я предполагаю использовать GL_TRIANGLE_STRIP
или что-то еще. Любые подсказки или запросить дополнительную информацию.