【问题标题】:Extracting relevant information from .obj 3d file从 .obj 3d 文件中提取相关信息
【发布时间】:2016-08-30 17:32:33
【问题描述】:

我通过 3D 扫描仪的扫描生成了一个 .obj 文件。但是,我不确定如何解释所有这些数据。我查看了维基百科并了解了 .ibj 文件的一般结构。我的目标是提取一些关于颜色的信息,但我不知道该怎么做。 vt 行中的数字代表什么,我如何使用这些数字来得出颜色?我的最终目标是扫描一只脚并取消扫描的地板“部分”。扫描脚部时,地板也是扫描的一部分,我想忽略地板并专注于脚部。这是 .obj 文件的一小部分:

【问题讨论】:

  • 当 obj 为 ASCII 时为什么要转储图像...对于想要尝试此操作的人来说,从记事本中简单复制粘贴会更简单更好...

标签: graphics 3d file-format .obj wavefront


【解决方案1】:

看起来像 Wavefront obj ASCII 文件格式......所以谷歌一下,你会发现大量的描述。在您的示例中:

  • v x y z 表示点坐标(顶点)[x,y,z]
  • vn nx,ny,nz 表示最后一点的法线向量 (nx,ny,nz) [x,y,z]
  • vt tx,ty 表示纹理坐标[tx,ty]

顶点是多边形网格的点。 法线用于光照计算(着色),所以如果你不使用它,你可以跳过它。 颜色存储在一些纹理图像中,您将在[tx,ty] 处选择它作为像素,范围为tx,ty=<-1,+1><0,+1>,因此您需要重新缩放到图像分辨率。

因此,您需要将所有这些数据读取到某个表中,然后找到带有面孔的部分(以f 开头):

  • f v1,v2,v3 表示渲染具有 3 个顶点的多边形,其中 v1,v2,v3 是表中顶点的索引。 注意索引从 1 开始,因此对于 C++ 样式的数组,您需要将索引减 1。

存在很多偏差,因此没有示例很难进一步详细说明(您的示例仅显示顶点表的开头)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2019-09-17
    • 2015-09-03
    相关资源
    最近更新 更多