¿Alguien que haya usado three.js me diga si es posible detectar el soporte webgl y, si no está presente, recurrir a un renderizado Canvas estándar?Three.js detecta el soporte webgl y el respaldo al lienzo normal
36
A
Respuesta
59
Sí, es posible. Puede usar CanvasRenderer
en lugar de WebGLRenderer
.
Acerca de la detección WebGL:
1) leer este artículo WebGL 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) Three.js ya cuenta con un detector de WebGL: https://github.com/mrdoob/three.js/blob/master/examples/js/Detector.js
renderer = Detector.webgl? new THREE.WebGLRenderer(): new THREE.CanvasRenderer();
3) Comprobar también el detector Modernizr: puntero de https://github.com/Modernizr/Modernizr/blob/master/feature-detects/webgl.js
10
Juan Mellado al detector Three.js fue super útil, pero prefiero no llevar todo el archivo en mi proyecto. Así que aquí está la función Detector.webgl() extraída.
function webglAvailable() {
try {
var canvas = document.createElement("canvas");
return !!
window.WebGLRenderingContext &&
(canvas.getContext("webgl") ||
canvas.getContext("experimental-webgl"));
} catch(e) {
return false;
}
}
y se utiliza similar a su ejemplo:
renderer = webglAvailable() ? new THREE.WebGLRenderer() : new THREE.CanvasRenderer();
Cuestiones relacionadas
- 1. Soporte de Canvas y WebGL (three.js) en dispositivos moble?
- 2. Dibujar elementos de la interfaz de usuario directamente en el área WebGL con Three.js
- 3. ¿Resaltar el soporte y el soporte Emacs?
- 4. Renderizar texto en lienzo usando WebGL
- 5. ¿Cómo hacer un mapa normal en THREE.js correctamente?
- 6. Three.js portado al código nativo?
- 7. ¿Detecta el soporte para un evento de JavaScript dado?
- 8. Backbone.js y three.js - MVC con canvas
- 9. ¿Detecta el soporte de navegador para XMLHttpRequests entre dominios?
- 10. Similitudes entre el lienzo HTML5 y el lienzo de Android
- 11. THREE.js renderers
- 12. Three.js insertar imagen
- 13. Lienzo HTML - el dibujo desaparece al cambiar el tamaño
- 14. Partículas vs ParticleSystem en three.js
- 15. ¿Cómo puedo establecer el color de un píxel en un lienzo usando WebGL?
- 16. Detecta el compilador con #ifdef
- 17. Mejorando el rendimiento de los sprites animados en three.js
- 18. Necesita ayuda en THREE.js TextGeometry
- 19. ¿Cómo detectar colisión en webgl?
- 20. Three.js - memoria de liberación
- 21. ¿Cómo agrego soporte para el navegador presenta como WebGL a mecanografiado?
- 22. Webgl gl.viewport cambio
- 23. WebGL - Terreno con textura con heightmap
- 24. Cambiar el cursor sobre HTML5 Lienzo al arrastrar el mouse
- 25. Fuentes Web y fuentes de respaldo
- 26. ¿Cómo cambiar el ancho de CubeGeometry con Three.js?
- 27. ¿Cómo respaldo y restauro el portapapeles del sistema en C#?
- 28. Three.js/WebGL: planos transparentes que ocultan otros planos detrás de ellos
- 29. ¿Detecta el software AdBlocking?
- 30. Arrastrar y soltar formas en el lienzo
Método 1/3 fallará si el navegador es compatible con WebGL, pero no se puede utilizar por alguna razón (como el controlador de la lista negra), la cual es por qué el Método 2 usa una función con un bloque try/catch y también verifica que el contexto realmente se pueda crear. –