Загрузка «индексов» из формата Wavefront OBJ

Я разрабатываю приложение для Android с OpenGL ES 2.0.

Я хочу загрузить экспорт, сделанный с помощью Blender 2.49b, в формате Wavefront OBJ. Я определил позицию вершины, нормаль и текстуру.

Я хочу использовать glDrawElements(режим GLenum, количество GLsizei, тип GLenum, const GLvoid *indices) для рисования моей сетки, но я не знаю, как получить последний параметр, индексы, из файла Wavefront OBJ.

Являются ли лица «индексами», которые я ищу?

Я нашел это на форуме: лица = индексы, начинающиеся с 1!

Что означает «начиная с 1!»?

Спасибо.


person VansFannel    schedule 03.12.2010    source источник


Ответы (2)


Это означает, что первый индекс равен 1 вместо нуля. Массивы/коллекции Java/C используют индексы, отсчитываемые от нуля, и первый элемент начинается с нуля. Индексы формата Wavefront OBJ начинаются с 1.

грани состоят из 3 значений v/vt/vn, которые являются индексами. Индексы не указываются непосредственно в формате файла. Вместо этого это порядок, в котором элементы v, vt, vn встречаются в файле. Таким образом, когда вы анализируете файл, вы должны отслеживать, сколько вершин, текстур вершин и нормалей вершин вы встретили.

Для получения подробной информации о формате вы можете обратиться к спецификации.

http://www.martinreddy.net/gfx/3d/OBJ.spec

person chubbsondubs    schedule 03.12.2010

В формате wavefront .obj нет индексов. Вы тот, кто указывает индексы при загрузке данных сетки из файла. Что бы я сделал, это:

iterate per face:
    iterate every vertex of a face
        assign index here when you store the data to your own project's vector

Другими словами, для каждой из этих строк:

f 3/55/23 34/2/12 34/43/128
f ...

для каждой тройки атрибутов ввести новую вершину (для хранения в буфере вершин) и новый индекс (для хранения в буфере индексов).

person KeyC0de    schedule 06.08.2020