Crear una Textura con Canvas2D

Si necesitas crear texturas en tiempo de ejecución para pintar dinámicamente, tal vez quieras usar CanvasRenderingContext2D, que es el conjunto de métodos de dibujo en 2D del navegador sobre el elemento <canvas>.

En Wonderland Engine, crea una textura desde un canvas a través de la API TextureManager.create(): this.engine.textures.create(canvas).

Ejemplo 

A continuación, encontrarás el ejemplo de la página de CanvasRenderingContext2D de MDN integrado en Wonderland Engine:

import {Component, Property} from '@wonderlandengine/api';

export class MyCanvasTexture extends Component {
    static TypeName = 'my-canvas-texture';
    static Properties = {
        /* Define este material en el editor. La textura se aplica a
         * todos los objetos que lo usen. */
        material: Property.material()
    };

    start() {
        const canvas = document.createElement('canvas');
        canvas.width = 300;
        canvas.height = 300;

        const ctx = canvas.getContext('2d');
        /* Realiza aquí tu dibujo en 2D (este es el ejemplo de MDN) */

        // Relleno de fondo blanco
        ctx.beginPath();
        ctx.fillStyle = '#fff';
        ctx.fillRect(0, 0, canvas.width, canvas.height);

        // Cambia el color de relleno de nuevo a negro
        ctx.fillStyle = '#000';
        // Define el grosor de la línea
        ctx.lineWidth = 10;

        // Muro
        ctx.strokeRect(75, 140, 150, 110);

        // Puerta
        ctx.fillRect(130, 190, 40, 60);

        // Techo
        ctx.beginPath();
        ctx.moveTo(50, 140);
        ctx.lineTo(150, 60);
        ctx.lineTo(250, 140);
        ctx.closePath();
        ctx.stroke();

        /* Crea una textura desde el canvas a través del TextureManager */
        this.canvasTexture = this.engine.textures.create(canvas);
        /* Aplica la textura al material (usa el setter generado) */
        this.material.setDiffuseTexture(this.canvasTexture);
    }
}

Actualizar después de un Cambio 

Después de haber cambiado un canvas tras crear la textura inicial, asegúrate de actualizar la textura para reflejar los cambios.

Para el ejemplo anterior, tú harías:

this.canvasTexture.update();

Para actualizar solo una subregión y mejorar el rendimiento, usa Texture.updateSubImage() en su lugar:

// Actualizar una región de 100x60 en el destino (0, 0) desde la fuente (28, 4)
this.canvasTexture.updateSubImage(28, 4, 100, 60, 0, 0, canvas);