Как бы вы проходили определения лицевых файлов OBJ для OpenGL
Вопрос
Я написал загрузчик 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, надеюсь, довольно прост и достаточно ясно, чтобы дать вам представление о том, как она работает, или вы можете просто использовать библиотеку, или вырезать и вставлять от нее. (Лицензия является общедоступным достоянием.) Посмотрите на него;