读取二进制 PLY 文件会产生奇怪的结果

发布于 2024-12-09 02:04:12 字数 661 浏览 1 评论 0 原文

我的任务是从二进制小端 .ply 文件读取顶点数据。问题是我无法找到一种从 end_header 行之后开始正确提取数据的方法。

PLY 文件:

ply
format binary_little_endian 1.0
element vertex 240753
property float x
property float y
property float z
property float nx
property float ny
property float nz
element face 477808
end_header
(after the end header there is a A0 byte indicating the new line then, ...)
AC76A0C04301644163416a42 ...

我什至无法正确识别第一个浮动。如果我使用浮点数的 IEE754 表示形式转换前 4 个字节,结果为 -3.5047936775001176e-12,但是前四个字节(= 第一个顶点的第一个 x 坐标)应为 -5.01449(根据从二进制到 ascii ply 文件的 meshlab 转换) )。

我正在使用 c++ fread、fseek...

我尝试每 4 个字节交换一次字节序,但结果也很糟糕。

我认为我以错误的方式提取字节。

My task is to read vertex data from a binary little endian .ply file. Problem is that I cant find a way how to correctly extract data, starting after the end_header line.

PLY file:

ply
format binary_little_endian 1.0
element vertex 240753
property float x
property float y
property float z
property float nx
property float ny
property float nz
element face 477808
end_header
(after the end header there is a A0 byte indicating the new line then, ...)
AC76A0C04301644163416a42 ...

I cant properly identify even first float. If I convert first 4 bytes using IEE754 representation of float, the result is -3.5047936775001176e-12, however first four bytes (= the first x coordinate of first vertex) should be -5.01449 (according to meshlab conversion from binary to ascii ply file).

I'm using c++ fread, fseek, ...

I tried to endian swap every 4 bytes but the result is also bad.

I think that I'm extracting the bytes in a wrong manner.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

影子是时光的心 2024-12-16 02:04:12

正如@tinman 所描述的:

如果您已经在无符号 int 变量中拥有表示浮点数的字节,那么您可以将无符号 int 和浮点数进行并集,将您拥有的无符号 int 分配给并集中的无符号 int,然后读取其中的浮点数联盟。

As described by @tinman:

If you already have the bytes that represent your float in an unsigned int variable then you can make a union of an unsigned int and float, assign the unsigned int you have to the unsigned int in the union and then read the float in the union.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文