Exportieren von Wonderland Engine Mesh als OBJ-Datei

Beim Generieren von Meshes zur Laufzeit kann es nützlich sein, andere Anwendungen zu verwenden, um das Ergebnis zu inspizieren. Dies hilft, wenn das generierte Mesh überhaupt nicht gerendert wird.

Wavefront OBJ ist ein sehr einfaches, textbasiertes Format, das von deiner Wonderland Engine JavaScript-Komponente aus geschrieben werden kann.

Code-Schnipsel 

Der folgende Code-Schnipsel empfängt ein Mesh, schreibt eine OBJ-Datei für Positionen und Indizes und lädt die Datei schließlich automatisch programmatisch herunter.

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

export function wleMeshToOBJ(wleMesh) {
    /* Rufe einen Attribut-Accessor für Positionen ab.
     * Du kannst dieses Skript leicht erweitern, um auch Normalen
     * und Texturattributen zu exportieren. */
    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;) {
        /* .obj-Indizes beginnen bei 1, nicht 0 */
        lines.push(`f ${wleMesh.indexData[i++] + 1} ${wleMesh.indexData[i++] + 1} ${wleMesh.indexData[i++] + 1}`);
    }

    /* Füge alle Zeilen zusammen und generiere einen binären Blob zum Herunterladen */
    const blob = new Blob([lines.join('\n')], {type: 'text/plain'});
    const url = URL.createObjectURL(blob);

    /* Lade den Blob automatisch programmatisch als Datei namens 'mesh.obj' herunter */
    const link = document.createElement('a');
    link.href = url;
    link.download = 'mesh.obj';

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