2015-07-14 3 views
-1

Im пытается создать парсер OBJ, который читает файл и отправляет вершины в opengl. Я использую glDrawElements для рисования модели, но похоже, что она не состоит из треугольников. Вы можете посмотреть ниже для моего кода, как я это делаю. Фрагмент кода - всего лишь образец. Пожалуйста, обратите внимание, что количество индексов отличается от модели, которую я загружаю.opengl - glDrawElements не рисовать треугольники

GLuint vbuffer; 
glGenBuffers(1, &vbuffer); 
glBindBuffer(GL_ARRAY_BUFFER, vbuffer); 
glBufferData(GL_ARRAY_BUFFER, 9 * sizeof(GLfloat), vertices, GL_STATIC_DRAW); 
glEnableVertexAttribArray(ff); 
glVertexAttribPointer(ff, 3, GL_FLOAT, GL_FALSE, 0, 0); 
glBindBuffer(GL_ARRAY_BUFFER, cbid); 
GLuint buffer; 
glGenBuffers(1, &buffer); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(GLshort), indices, GL_STATIC_DRAW); 
glDrawElements(GL_LINE_STRIP, 6, GL_UNSIGNED_SHORT, 0); 
glDisableVertexAttribArray(0); 

Вот результат, который я получаю. Image Link

ответ

0

В этой строке кода

glDrawElements(GL_LINE_STRIP, 6, GL_UNSIGNED_SHORT, 0); 

вы используете GL_LINE_STRIP, которые не то, что вы хотите, если данные содержат треугольники. То, что вы хотите в этом случае, это GL_TRIANGLES, который даст вам ожидаемое поведение.

Кроме того, я не знаю, является ли это только опечаткой, но в вашем вызове glDrawElements вы передаете GL_UNSIGNED_SHORT, а при инициализации буфера элемента вы передаете sizeof (GLshort), а не GLushort.

+0

Благодарим за отзыв. Предполагалось, что это Глюшорт. Что касается примитивного типа, который будет использоваться, мне было интересно, как я могу получить вывод той же модели при использовании line_strip? Я просто хочу проверить правильность рендеринга вершин, поскольку при использовании GL_TRIANGLES я могу получить правильный результат с этой моделью. – zyneragetro

+0

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

+0

Но как передать вершины? Есть ли стандартный способ сделать это? Нужно ли мне переупорядочивать все из них, включая индексы? Я сейчас слишком запутан, и я новичок в opengl. Надеюсь, ты поможешь мне в этом. – zyneragetro

Смежные вопросы