使用C++解析Wavefront .obj文件

vir*_*raj 6 c++ wavefront

在尝试解析wavefront .obj文件时,我想到了两种方法:

  1. 创建一个顶点数量大小的二维数组.当一个面使用一个顶点时,从数组中获取它的坐标.
  2. 获取顶点列表的起始位置,然后当面使用顶点时,扫描线直到到达顶点.

IMO,选项1将非常耗费内存,但要快得多.由于选项2涉及大量文件读取(并且因为大多数对象中的顶点数量变得非常大),因此速度会慢得多,但记忆密集程度会降低.

问题是:比较内存和速度之间的权衡,哪个选项更适合普通计算机?而且,还有另一种方法吗?

我计划使用OpenGL和GLFW来渲染对象.

dat*_*olf 5

IMO,选项1将非常耗费内存,但速度要快得多.

无论如何,你必须将这些顶点放入内存中.但是不需要2D阵列,BTW会导致两个指针间接,因此会受到重大影响.只需使用简单std::vector<Vertex>的数据,矢量索引就是随附的面部列表的索引.

编辑由于评论

class Vertex
{
    union { struct { float x, y, z }; float pos[3] };
    union { struct { float nx, ny, nz }; float normal[3] };
    union { struct { float s, t }; float pos[2] };
    Vertex &operator=();
}

std::vector<Vertex>;
Run Code Online (Sandbox Code Playgroud)