import { Mesh } from '../core/Mesh.js' export const OBJ = (obj) => { var verticies = [] var indicies = [] var normals = [] var uvs = [] var indexedNormals = []; var indexedUvs = []; obj.split('\n').forEach((line) => { const tokens = line.toLowerCase().trim().split(' ').filter((str) => str !== '') if(tokens.length < 1) return; if(tokens[0] === 'v') { verticies.push(parseFloat(tokens[1])) verticies.push(parseFloat(tokens[2])) verticies.push(parseFloat(tokens[3])) } else if(tokens[0] === 'vt') { uvs.push(parseFloat(tokens[1])) uvs.push(parseFloat(tokens[2])) } else if(tokens[0] === 'vn') { normals.push(parseFloat(tokens[1])) normals.push(parseFloat(tokens[2])) normals.push(parseFloat(tokens[3])) } else if(tokens[0] === 'f') { for (let i = 1; i < 4; i++) { const index = tokens[i].split('/').filter((str) => str !== '').map((s) => parseInt(s) - 1) indicies.push(index[0]) indexedUvs[index[0]*2] = uvs[index[1]*2] indexedUvs[index[0]*2+1] = uvs[index[1]*2+1] indexedNormals[index[0]*3] = normals[index[2]*3] indexedNormals[index[0]*3+1] = normals[index[2]*3+1] indexedNormals[index[0]*3+2] = normals[index[2]*3+2] } } }) return new Mesh(indicies.length) .indicies(indicies) .store(verticies, 3) .store(indexedNormals, 3) .store(indexedUvs, 2) .finish() }