在从obj文件加载的模型上映射纹理的有效方法

时间:2012-04-21 18:52:40

标签: c opengl texture-mapping

我正在制作一个给定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 个答案:

答案 0 :(得分:0)

不幸的是,OpenGL没有有效的API来做你想要的事情。如果你想将OBJ与顶点数组/缓冲区一起使用,你必须分解你给出的所有顶点和texcoords,并在数组中重组它们,使得顶点的数量和texcoords的数量是相同的,复制顶点和texcoords根据需要。

如果您搜索我相信您会发现有关如何执行此操作的几个问题。