obj文件正确加载坐标

用大疆导出的obj格式文件的坐标存在偏移,采用python读取obj文件的坐标不准确,请问怎么读取才会读取到正确的坐标,采用下面的代码只能读取obj文件本身,纹理,坐标都无法读取,请问怎么解决呢


mesh = o3d.io.read_triangle_mesh("Block.obj")

```

该回答引用ChatGPT

导出的 OBJ 格式文件中的坐标偏移可能是由于坐标系的不同导致的。OBJ 格式中的坐标系是右手坐标系,而大疆的导出文件可能使用的是左手坐标系。如果是这种情况,你需要将读取的 OBJ 文件中的顶点坐标进行坐标系变换,将左手坐标系变换为右手坐标系,才能得到正确的坐标。

使用 Python 读取 OBJ 文件,可以使用以下代码来读取 OBJ 文件中的顶点坐标:


import numpy as np

vertices = []
with open("Block.obj", "r") as f:
    for line in f:
        if line.startswith("v "):
            parts = line.strip().split(" ")
            vertex = [float(parts[1]), float(parts[2]), float(parts[3])]
            vertices.append(vertex)

vertices = np.array(vertices)

上面的代码将 OBJ 文件中以 "v " 开头的行解析为顶点坐标,将其存储在一个 NumPy 数组中。然而,这并不解决坐标偏移的问题。要解决坐标偏移的问题,你需要将左手坐标系变换为右手坐标系。这可以通过将 Z 轴取反来实现,如下所示:


vertices[:, 2] = -vertices[:, 2]

将 Z 轴取反后,顶点坐标就从左手坐标系转换为了右手坐标系,可以用于后续的操作。