Wavefront obj文件,Faces有3个纹理坐标

Sno*_*ama 1 opengl 3d wavefront

我从blender导出一个.obj加载到一个C++程序我正在编写一切都很好但是我想知道在解析面部时我注意到面部数据中第三个点上有一个未使用的纹理坐标.

  f 1/1 2/2 3/3
//f 1/s 2/t 3/? Its vt3 that is the coordinate in question
Run Code Online (Sandbox Code Playgroud)

这是用来做什么的?我应该保留它吗?

Jus*_*ers 6

我认为你对obj文件格式有些误解,并且对3D和2D坐标的混合感到困惑.

事实上三角形有3个纹理坐标,相同它们有3个位置.这是正确的,预期的,甚至是必需的.如果三角形上的两个点具有纹理坐标,但其中一个没有纹理坐标则没有意义.

f定义了一个面,在这种情况下有三个顶点(三角形).每个顶点都有一个3D位置和一个2D UV坐标.这意味着三角形由3个3D位置和3个2D UV坐标(每个顶点设置一个)组成.面编号索引到顶点位置和纹理坐标的数组中,而不是构成这些结构的各个元素.

符号实际上看起来像这样.

f v1/vt1 v2/vt2 v3/vt3
Run Code Online (Sandbox Code Playgroud)

阅读这些更多细节:

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;
Run Code Online (Sandbox Code Playgroud)