38 votes

Three.js détecte le support webgl et le retour au canevas normal

Quelqu'un qui a utilisé three.js peut-il me dire s'il est possible de détecter le support webgl et, s'il n'est pas présent, de revenir à un rendu Canvas standard?

61voto

Juan Mellado Points 9794

Oui, c'est possible. Vous pouvez utiliser CanvasRenderer au lieu de WebGLRenderer.

Sur WebGL de détection:

1) Lire ce WebGL article de wiki: http://www.khronos.org/webgl/wiki/FAQ

 if (!window.WebGLRenderingContext) {
    // the browser doesn't even know what WebGL is
    window.location = "http://get.webgl.org";
  } else {
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("webgl");
    if (!context) {
      // browser supports WebGL but initialization failed.
      window.location = "http://get.webgl.org/troubleshooting";
    }
  }

2) Trois.js a déjà un détecteur de WebGL: https://github.com/mrdoob/three.js/blob/master/examples/js/Detector.js

renderer = Detector.webgl? new THREE.WebGLRenderer(): new THREE.CanvasRenderer();

3) Vérifier également la Modernizr détecteur: https://github.com/Modernizr/Modernizr/blob/master/feature-detects/webgl.js

13voto

Abtin Forouzandeh Points 1778

Le pointeur de Juan Mellado sur le détecteur Three.js était super utile, mais je préfère ne pas intégrer tout le fichier dans mon projet. Voici donc la fonction Detector.webgl () extraite.

 function webglAvailable() {
    try {
        var canvas = document.createElement("canvas");
        return !!
            window.WebGLRenderingContext && 
            (canvas.getContext("webgl") || 
                canvas.getContext("experimental-webgl"));
    } catch(e) { 
        return false;
    } 
}
 

Et il est utilisé de manière similaire à son exemple:

 renderer = webglAvailable() ? new THREE.WebGLRenderer() : new THREE.CanvasRenderer();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X