Question

Il est possible de récupérer les données bitmap élément HTML Canvas 2D, il est également possible d'accéder au contenu rendu d'un élément de toile 3D / WebGL sous forme de données bitmap?

Était-ce utile?

La solution

La signature des readPixels de WebGL a changé dans un projet plus tard.

Au lieu de retourner un nouveau tableau avec les données de pixel à chaque fois, vous passez un tableau à remplir en dernier argument:

readPixels void (GLINT x, y Brill, largeur GLsizei, hauteur GLsizei, le format GLenum, type GLenum, ArrayBufferView pixels)

Cela permet de réutiliser le même tableau pour plusieurs opérations readPixels.

Autres conseils

Dans le projet de travail de WebGL Spécification :

ArrayBufferView readPixels(GLint x, GLint y, 
    GLsizei width, GLsizei height, GLenum format, GLenum type)
  

Retourner un ArrayBufferView avec des pixels   dans le rectangle passé. Les données   retour de readPixels doit être   la mise à jour à la plus récente   commande de dessin envoyé. tout l'état brut   commandes de dessin doivent être remplis et   leurs résultats ont été présentés au courant   dessin des tampons avant readPixels   accède à la mémoire tampon de dessin.

     

La sous-classe spécifique de   ArrayBufferView retourné dépend   le type passé. Si c'est   UNSIGNED_BYTE, un Uint8Array est   retourné, sinon un Uint16Array est   retour.

pas aussi direct que l'utilisation readPixels, mais cela pourrait aussi fonctionner. Vous pouvez également rendre la toile à un élément d'image, comme suit:

var img = document.getElementById("game-canvas").toDataURL("image/jpeg");
$("#shots").append("<img src=\"" + img + "\" width=\"320\" height=\"480\"/>");

Vous devez obtenir votre contexte WebGL avec l'option spéciale preserveDrawingContext pour que cela fonctionne bien:

var gl = canvas.getContext("experimental-webgl", {preserveDrawingBuffer: true});

A partir de là, si vous voulez manipuler l'image facilement, vous pourriez rendre que dans une toile 2d et lire les pixels là-bas si vous voulez.

Je l'utilise régulièrement pour prendre ce « screenshots » des choses que je joue avec.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top