function parsePLY data const mesh v n t i const lines data split n let vertexCount 0 let vertexDataStartIndex 0 let faceCount 0 let faceDataStartIndex 0 let format v false n false t false i false for let i 0 i lines length i const line lines i trim if line startsWith end_header vertexDataStartIndex i 1 else if line startsWith element vertex vertexCount parseInt line split 2 else if line startsWith element face faceCount parseInt line split 2 else if line startsWith property list if line split 4 vertex_indices format i true else if line startsWith property float if line split 2 x format v true if line split 2 nx format n true if line split 2 s format t true faceDataStartIndex vertexDataStartIndex vertexCount console assert vertexCount 0 faceCount 0 console assert format i 0 format v 0 for let i vertexDataStartIndex i vertexDataStartIndex vertexCount i const values lines i trim split console assert format v const v parseFloat values 0 parseFloat values 1 parseFloat values 2 mesh v push v if format n const n parseFloat values 3 parseFloat values 4 parseFloat values 5 mesh n push n if format t const t parseFloat values 6 parseFloat values 7 mesh t push t for let i faceDataStartIndex i faceDataStartIndex faceCount i const values lines i trim split const vertexCountInFace parseInt values 0 if vertexCountInFace 3 for let j 1 j vertexCountInFace j mesh i push parseInt values j else let tmp for let j 1 j vertexCountInFace j tmp push parseInt values j mesh i push tmp 0 tmp 1 tmp 2 mesh i push tmp 2 tmp 3 tmp 0 return mesh Example usage const plyData ply format ascii 1 0 comment Created in WebGPU version 0 0 2 element vertex 14 property float x property float y property float z property float nx property float ny property float nz property float s property float t element face 6 property list uchar uint vertex_indices end_header 1 1 1 0 5773503 0 5773503 0 5773503 0 625 0 5 1 1 1 0 5773503 0 5773503 0 5773503 0 875 0 5 1 1 1 0 5773503 0 5773503 0 5773503 0 875 0 75 1 1 1 0 5773503 0 5773503 0 5773503 0 625 0 75 1 1 1 0 5773503 0 5773503 0 5773503 0 375 0 75 1 1 1 0 5773503 0 5773503 0 5773503 0 625 1 1 1 1 0 5773503 0 5773503 0 5773503 0 375 1 1 1 1 0 5773503 0 5773503 0 5773503 0 375 0 1 1 1 0 5773503 0 5773503 0 5773503 0 625 0 1 1 1 0 5773503 0 5773503 0 5773503 0 625 0 25 1 1 1 0 5773503 0 5773503 0 5773503 0 375 0 25 1 1 1 0 5773503 0 5773503 0 5773503 0 125 0 5 1 1 1 0 5773503 0 5773503 0 5773503 0 375 0 5 1 1 1 0 5773503 0 5773503 0 5773503 0 125 0 75 4 0 1 2 3 4 4 3 5 6 4 7 8 9 10 4 11 12 4 13 4 12 0 3 4 4 10 9 0 12 const mesh parsePLY plyData console log Vertices mesh v console log Indices mesh i console log Coords mesh t console log Normals mesh n
mesh t push t for let i faceDataStartIndex i faceDataStartIndex faceCount i const values lines i trim split const vertexCountInFace parseInt values 0 if vertexCountInFace 3 for let j 1 j vertexCountInFace j mesh i push parseInt values j else let tmp for let j 1 j vertexCountInFace j tmp push parseInt values j mesh i push tmp 0 tmp 1 tmp 2 mesh i push tmp 2 tmp 3 tmp 0 return mesh Example usage const plyData ply format ascii 1 0 comment Created in WebGPU version 0 0 2 element vertex 14 property float x property float y property float z property float nx property float ny property float nz property float s property float t element face 6 property list uchar uint vertex_indices end_header 1 1 1 0 5773503 0 5773503 0 5773503 0 625 0 5 1 1 1 0 5773503 0 5773503 0 5773503 0 875 0 5 1 1 1 0 5773503 0 5773503 0 5773503 0 875 0 75 1 1 1 0 5773503 0 5773503 0 5773503 0 625 0 75 1 1 1 0 5773503 0 5773503 0 5773503 0 375 0 75 1 1 1 0 5773503 0 5773503 0 5773503 0 625 1 1 1 1 0 5773503 0 5773503 0 5773503 0 375 1 1 1 1 0 5773503 0 5773503 0 5773503 0 375 0 1 1 1 0 5773503 0 5773503 0 5773503 0 625 0 1 1 1 0 5773503 0 5773503 0 5773503 0 625 0 25 1 1 1 0 5773503 0 5773503 0 5773503 0 375 0 25 1 1 1 0 5773503 0 5773503 0 5773503 0 125 0 5 1 1 1 0 5773503 0 5773503 0 5773503 0 375 0 5 1 1 1 0 5773503 0 5773503 0 5773503 0 125 0 75 4 0 1 2 3 4 4 3 5 6 4 7 8 9 10 4 11 12 4 13 4 12 0 3 4 4 10 9 0 12 const mesh parsePLY plyData console log Vertices mesh v console log Indices mesh i console log Coords mesh t console log Normals mesh n