Используйте элементы рисования в OPENGL ES 1.x с .OBJ и несколькими индексами

Я учу себя opengl es. Недавно я понял, как анализировать/загружать сетку из файла .OBJ. Сейчас я пытаюсь применить к нему текстуру, я знаю, что могу использовать только один набор индексов... кроме того, что я потерял концепцию и код, необходимые для рисования текстуры на моем кубе. Подробное/полуподробное объяснение того, что требуется, код и описание того, что происходит, было бы очень признательно. Я не нашел много открытий на эту тему, и объяснения для меня немного расплывчаты. Пожалуйста, помните, что я использую opengl es. Заранее спасибо. Кстати, если это поможет, это файл .OBJ

enter code here
# Blender v2.62 (sub 0) OBJ File: ''

www.blender.org

mtllib untitled.mtl о Cube_Cube.002 v 1,067472 -0,769912 -1,117719 v 1,067472 -0,769912 0,882281 v -0,932528 -0,769912 0,882281 v -0,932527 -0,769912 -1,117719 v 1,067473 1,230088 -1,117718 v 1,067472 1,230088 0,882282 1,230088 v -0,932528 0,882281 v -0,932528 1,230088 -1,117719 0,951958 0,112804 В.Т. В.Т. 0,951958 -0,887196 -0,048042 -0,887196 В.Т. В.Т. -0,048042 0,112804 0,058859 0,112804 В.Т. В.Т. 0,058859 1,112804 1,058859 1,112804 В.Т. В.Т. 1,058859 0,112804 0,951958 1,112804 В.Т. В.Т. -0,941141 0,112804 -0,941141 -0,887196 В.Т. В.Т. 0,951958 0,058859 0,058859 -0,048042 В.Т. В.Т. 0,951958 -0,941141 vt 1,951958 -0,941141 vt -0,048042 -0,941141 usemtl Материал.001 s off f 5/1 1/2 4/3 f 5/1 4/3 8/4 f 3/5 7/6 8/7 f 3 /5 8/7 4/8 ж 2/1 6/9 3/4 ж 6/1 7/4 3/3 ж 1/5 5/6 2/10 ж 5/5 6/10 2/11 ж 5 /12 8/13 6/14 ж 8/12 7/14 6/15 ж 1/12 2/14 3/16 ж 1/12 3/16 4/13

P.S. Я понимаю, как читать/разбирать/понимать эти аспекты файла. Мне просто нужно пояснить, как я должен использовать один индексный буфер для текстуры и вершин, делая только один вызов drawelements. Еще раз спасибо!


person PhaTty-FU    schedule 15.05.2012    source источник
comment
По сути, вам нужно создать совершенно новые буферы вершин и texcoord, чтобы индекс N соответствовал вершине N и texcoord N. Я думаю, вы, вероятно, могли бы поискать немного больше, потому что я думаю, что этот вопрос или аналогичный, вероятно, задавали сотни раз. (просто найдите «vbo glDrawElements»)   -  person Tim    schedule 16.05.2012
comment
тогда два вопроса. Нужно ли иметь одинаковое количество V и VT? Кроме того, под соответствием вы подразумеваете, что это будет похоже на f 1/1f 2/2 и т. д.? После того, как я это сделаю... вношу ли я какие-либо изменения в vertpointer и textcoordpointer? Наконец, когда все будет сделано... мне просто вызвать элементы рисования один раз, как обычно? Это те части, которые я не мог обернуть вокруг своей головы.   -  person PhaTty-FU    schedule 16.05.2012
comment
Да, ваш массив вершин и массив texcoord должны быть одинаковой длины. Это будет означать создание большего количества вершин и пар texcoord, которых нет в самом OBJ. И да, как только вы это сделаете, это всего лишь один вызов glDrawElements, как и любой другой объект. Трудная часть — это подготовка массивов.   -  person Tim    schedule 16.05.2012
comment
спасибо за направление, это то, что мне нужно было знать, чтобы сэкономить дни попыток / неудач.   -  person PhaTty-FU    schedule 16.05.2012


Ответы (1)


Я не знаю, может ли блендер это сделать, но существуют некоторые инструменты для экспорта .obj с одним набором индексов. Это будет выглядеть так:

f 6/6/6 1/1/1 4/4/4 
f 4/4/4 1/1/1 3/3/3 
f 1/1/1 2/2/2 3/3/3 
f 12/12/12 2/2/2 1/1/1 
f 11/11/11 12/12/12 1/1/1 
f 11/11/11 81/81/81 12/12/12 

Например, UDK делает это, когда вы экспортируете сцену (сделанную из StaticMesh) в формат .obj. Использование инструмента, который экспортирует .obj таким образом, является самым простым решением для вас. Однако вы можете сами перестроить массивы из того, что вы прочитали из .obj в своем коде, но это скучная и ненужная операция, требующая много времени.

person Benlitz    schedule 15.05.2012
comment
Я хотел бы знать, как сделать это вручную, если возникнет такая необходимость... но это может быть позже. Думаю, я попытаюсь найти способ экспортировать их более удобным способом. Спасибо за ответ. - person PhaTty-FU; 16.05.2012