Esportare un Mesh di Wonderland Engine come file OBJ

Quando si generano mesh a runtime, può essere utile utilizzare altre applicazioni per ispezionare il risultato. Questo aiuta quando la mesh generata non viene renderizzata affatto.

Wavefront OBJ è un formato di testo molto semplice che può essere scritto dalla tua componente JavaScript di Wonderland Engine.

Codice di esempio 

Il seguente codice di esempio riceve un Mesh, scrive un file OBJ per le posizioni e gli indici, per poi scaricare automaticamente il file in modo programmato.

import {MeshAttribute} from '@wonderlandengine/api';

export function wleMeshToOBJ(wleMesh) {
    /* Ottieni un accessor per l'attributo delle posizioni.
     * Puoi facilmente estendere questo script per esportare anche le normali
     * e gli attributi delle texture. */
    const positions = wleMesh.attribute(MeshAttribute.Position);

    const lines = [];
    for(let i = 0; i < positions.length; ++i) {
        const [x, y, z] = positions.get(i);
        lines.push(`v ${x} ${y} ${z}`);
    }

    const indexCount = wleMesh.indexData.length;
    for (let i = 0; i < indexCount;) {
        /* Gli indici .obj iniziano da 1, non da 0 */
        lines.push(`f ${wleMesh.indexData[i++] + 1} ${wleMesh.indexData[i++] + 1} ${wleMesh.indexData[i++] + 1}`);
    }

    /* Concatena tutte le linee e genera un blob binario per il download */
    const blob = new Blob([lines.join('\n')], {type: 'text/plain'});
    const url = URL.createObjectURL(blob);

    /* Scarica automaticamente il blob programmato come un file chiamato 'mesh.obj' */
    const link = document.createElement('a');
    link.href = url;
    link.download = 'mesh.obj';

    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}