gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:00:44 25 4
gpt4 key购买 nike

我正在制作一个程序,给定一个 obj 文件,它渲染模型。目前它无需纹理映射即可工作,但我想通过读取 Material 库文件来实现此功能。

但我发现顶点数可能与纹理坐标数不同。看这个例子:

# 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 来完成我想要的事情。

最佳答案

不幸的是,OpenGL 没有有效的 API 来完成您想要的操作。如果您想将 OBJ 与顶点数组/缓冲区一起使用,则必须分解给定的所有顶点和纹理坐标,并将它们重新组装到数组中,以使顶点数和纹理坐标数相同,从而复制顶点和纹理坐标根据需要。

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

关于c - 在从 obj 文件加载的模型上映射纹理的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10261947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com