Come si fa a recuperare i dati bitmap WebGL?
Domanda
E 'possibile recuperare l'elemento HTML Canvas 2D dati bitmap, è anche possibile accedere al contenuto reso di un elemento Canvas 3D / WebGL come dati bitmap?
Soluzione
La firma di readPixels di WebGL è cambiato in un progetto più tardi.
Invece di restituire un nuovo array con l'everytime i dati di pixel, si passa un array di riempire come ultimo argomento:
readPixels nulli (GLint x, y GLint, larghezza GLsizei, altezza GLsizei, formato GLenum, tipo GLenum, pixel ArrayBufferView)
Ciò consente di riutilizzare la stessa matrice per operazioni multiple readPixels.
Altri suggerimenti
Dalla bozza di lavoro della WebGL Specification :
ArrayBufferView readPixels(GLint x, GLint y,
GLsizei width, GLsizei height, GLenum format, GLenum type)
Restituisce un'ArrayBufferView con i pixel all'interno del rettangolo passato. I dati tornato da readPixels deve essere up-to-date del più recente inviato comando di disegno. qualsiasi non trasformati comandi di disegno devono essere compilati e i loro risultati presentati al corrente disegno buffer prima readPixels accede al buffer di disegno.
La specifica sottoclasse di ArrayBufferView restituito dipende il tipo di passato. Se è UNSIGNED_BYTE, un Uint8Array è tornato, altrimenti un Uint16Array è restituito.
Non più diretto con readPixels, ma questo potrebbe anche lavoro. È inoltre possibile rendere la tela per un elemento di immagine, in questo modo:
var img = document.getElementById("game-canvas").toDataURL("image/jpeg");
$("#shots").append("<img src=\"" + img + "\" width=\"320\" height=\"480\"/>");
Si deve arrivare vostro contesto WebGL con l'opzione speciale preserveDrawingContext per questo lavoro però:
var gl = canvas.getContext("experimental-webgl", {preserveDrawingBuffer: true});
Da lì in poi, se si vuole manipolare l'immagine con facilità, si potrebbe rendere che in una tela 2d e leggere i pixel se volete.
Io uso regolarmente presente a prendere "screenshot" delle cose che sto giocando con.