kri*_*s89 3 graphics file-format 3d-model meshlab
出于某种目的,我需要读取具有嵌入纹理的PLY文件(斯坦福三角形格式).我看到了几个PLY文件的规范,但找不到指定纹理映射语法的单个源.似乎有这么多的库读取PLY文件,但大多数它们似乎不支持纹理(它们只是崩溃;我尝试了2-3个).以下是带有纹理的层文件的标题:
ply
format binary_little_endian 1.0
comment TextureFile Parameterization.png
element vertex 50383
property float x
property float y
property float z
property float nx
property float ny
property float nz
element face 99994
property list uint8 int32 vertex_index
property list uint8 float texcoord
end_header
Run Code Online (Sandbox Code Playgroud)
我不明白的是这条线property list uint8 float texcoord.对应于面部的列表也是
3 1247 1257 1279 6 0.09163 0.565323 0.109197 0.565733 0.10888 0.602539 6 9 0.992157 0.992157 0.992157 0.992157 0.992157 0.992157 0.992157 0.992157 0.992157`.
Run Code Online (Sandbox Code Playgroud)
这个清单是什么; 格式是什么?虽然我明白PLY让你有机会为元素定义自己的属性,但处理纹理似乎是一个标准,很多应用程序(如流行的Meshlab)似乎使用上面的语法打开纹理PLY文件.
我想知道读取纹理化PLY文件所遵循的标准语法是什么,如果可能的话,还要知道找到此信息的来源.
在PLY文件中,面通常包含值列表,这些列表的大小可能不同.如果它是一个三角形面,则需要三个值,一个quad = 4,依此类推,直到任意n-gon.列表在这样的行中声明:
property list uint8 int32 vertex_index
Run Code Online (Sandbox Code Playgroud)
这是一个名为'vertex_index'的列表.它总是由一个8位无符号整数(即uint8)组成,其大小为N,后跟N个32位整数(即int32).
在示例行中,它立即显示:
3 1247 1257 1279
Run Code Online (Sandbox Code Playgroud)
这说,这里有3个值,然后它给你三个.
现在第二个列表是纹理坐标应该是:
property list uint8 float texcoord
Run Code Online (Sandbox Code Playgroud)
它就像第一个列表一样,大小是第一个(作为无符号字节),但这次它将跟随一系列32位浮点数而不是整数(对纹理坐标有意义).直截了当的解释是,vertex_index中列出的每个顶点都有一个纹理坐标.如果我们假设这些只是2d纹理坐标(一个非常安全的假设),我们应该期望看到数字6后跟6个浮点值......我们这样做:
6 0.09163 0.565323 0.109197 0.565733 0.10888 0.602539
Run Code Online (Sandbox Code Playgroud)
这些是与已列出的三个顶点对应的纹理坐标.
现在,对于一张脸,应该是它.我不知道其余部分是什么东西.根据你的标题,文件的其余部分应该是二进制的,所以我不知道你是如何把它作为一行ascii文本,但该行上的额外数据不应该在那里(也根据完全定义一个标题的标题)面对).
| 归档时间: |
|
| 查看次数: |
6855 次 |
| 最近记录: |