我从blender导出一个.obj加载到C ++程序中我写的一切都很好但是我想知道在解析面部时我注意到面部数据中的第三个点上有一个未使用的纹理坐标。
f 1/1 2/2 3/3
//f 1/s 2/t 3/? Its vt3 that is the coordinate in question
这是用来做什么的?我应该保留它吗?
答案 0 :(得分:6)
我认为你对obj文件格式有些误解,并且对3D和2D坐标的混合感到困惑。
三角形实际上有3个纹理坐标,相同它们有3个位置。这是正确的,预期的,甚至是必需的。如果三角形上的两个点具有纹理坐标,但其中一个没有纹理坐标,则没有意义。
f
定义一个面,在这种情况下有三个顶点(三角形)。每个顶点都有一个3D位置和一个2D UV坐标。这意味着三角形由3个3D位置和3个2D UV坐标(每个顶点设置一个)组成。面部编号索引到顶点位置和纹理坐标的数组中,而不是构成这些结构的各个元素。
符号实际上看起来像这样。
f v1/vt1 v2/vt2 v3/vt3
阅读这些内容以获取更多详细信息:
http://www.eg-models.de/formats/Format_Obj.html http://www.cs.cmu.edu/~mbz/personal/graphics/obj.html
通过在代码中考虑三角形结构可以更好地可视化:
struct
{
Vec2 texCoord; // one vt for each vertex (s,t)
Vec3 position; // one v for each vertex (x,y,z)
} Vertex;
struct
{
Vertex verts[3]; // 3 vertices
} Face;