Как бы вы проходили определения лицевых файлов OBJ для OpenGL

StackOverflow https://stackoverflow.com/questions/3809884

Вопрос

Я написал загрузчик OBJ, который разбирает вершины, координаты текстур и нормали, каждый из которых хранятся в Floatbuffer и передается в OpenGL:

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fbVertices);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fbNormals);

Однако я ошеломлен тем, как я должен пройти свой буфер индекса в Gldrawelements, я прочитал, что индекс будет ссылаться на индекс в массиве для вершин, текстуры и нормалей, но при чтении описания файла OBJ Кажется, что лица хранятся в формате, таком как это:

f 1/2/3 4/5/6 7/8/9

с форматом

vertice/texture/normal

Gldrawelements принимает только 1 индекс, который должен относиться ко всем 3, но когда я смотрю на фактический файл OBJ, это не кажется возможным. Как вы проходите индекс для всех 3?

Вы можете найти копию кода здесь:http://codepad.org/melc1hic.

Это было полезно?

Решение

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

Другие советы

Я написал небольшую библиотеку, которая анализирует файлы .obj и включает в себя образец код для рендеринга модели в OpenGL (LWJGL). Код для создания VBOS, надеюсь, довольно прост и достаточно ясно, чтобы дать вам представление о том, как она работает, или вы можете просто использовать библиотеку, или вырезать и вставлять от нее. (Лицензия является общедоступным достоянием.) Посмотрите на него;

http://darksleep.com/oobjoCloader/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top