0

我正在制作一个给定 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 来做我想做的事。

4

1 回答 1

0

不幸的是,OpenGL 没有高效的 API 来做你想做的事。如果要将 OBJ 与顶点数组/缓冲区一起使用,则必须分解给定的所有顶点和 texcoords 并将它们重新组合成数组,以使顶点数和 texcoords 数量相同,复制顶点和 texcoords如所须。

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

于 2012-04-21T19:29:18.850 回答