2012-04-21 2 views
0

Я делаю программу, которая задает файл obj, она отображает модель. На данный момент он работает без текстурного сопоставления, но я хочу реализовать эту возможность, читая файл библиотеки материалов.эффективный способ сопоставления текстуры на модели, загруженной из файла obj

Но я вижу, что количество вершин может отличаться от числа координат текстуры. Посмотрите этот пример:

# Blender v2.58 (sub 0) OBJ File: '' 
# www.blender.org 
mtllib /home/frenk/Documenti/Progetti/dado.mtl 
o Cube 
v 1.000000 -1.000000 -1.000000 
v 1.000000 -1.000000 1.000000 
v -1.000000 -1.000000 1.000000 
v -1.000000 -1.000000 -1.000000 
v 1.000000 1.000000 -0.999999 
v 0.999999 1.000000 1.000001 
v -1.000000 1.000000 1.000000 
v -1.000000 1.000000 -1.000000 
vt 0.593772 0.740196 
vt 0.593666 0.869263 
vt 0.394866 0.869219 
vt 0.394973 0.740152 
vt 0.792572 0.740240 
vt 0.993810 0.740284 
vt 0.993703 0.869351 
vt 0.792466 0.869307 
vt 0.792360 0.995233 
vt 0.593560 0.995189 
vt 0.593984 0.482061 
vt 0.792784 0.482105 
vt 0.792678 0.611172 
vt 0.593878 0.611129 
usemtl dado_verde_dado.tga 
s off 
f 1/1 2/2 3/3 4/4 
f 5/5 8/6 7/7 6/8 
f 1/1 5/5 6/8 2/2 
f 2/2 6/8 7/9 3/10 
f 3/11 7/12 8/13 4/14 
f 5/5 1/1 4/14 8/13 

Так я не могу использовать функцию drawElements(), так как индексы не совпадают. Нужно ли мне преобразовывать координаты вершин в координаты текстуры, один к одному?

//example 
glBegin(GLTriangles); 
gltexcoord2f(...); glvertex3f(...); 
... 
blaBlaBla(...); 
... 
glEnd(); 

Я считаю, что эффективный API должен существовать для того, чтобы делать то, что я хочу.

+1

Библиотека ASSIMP загрузит файлы .obj для вас и настроит все так, как вам хочется. Однако вам все равно придется создавать объекты GL для использования моделей. – Robinson

ответ

0

К сожалению, у OpenGL нет эффективного API для выполнения того, что вы хотите. Если вы хотите использовать OBJ с массивами/буферами вершин, вам придется разложить все вершины и текс-символы, которые вам даны, и собрать их в массивах так, чтобы количество вершин и количество текскодов были одинаковыми, дублируя вершины и текс-координаты по мере необходимости.

Если вы ищете, то я уверен, что вы найдете несколько вопросов о том, как это сделать.

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