Czy ktoś, kto użył three.js, powie mi, czy można wykryć obsługę webgl, a jeśli nie jest obecny, wrócić do standardowego renderowania Canvas?Three.js wykrywa obsługę webgl i powrót do zwykłego płótna.
36
A
Odpowiedz
59
Tak, jest to możliwe. Możesz użyć CanvasRenderer
zamiast WebGLRenderer
.
O wykryciu WebGL:
1) przeczytać ten artykuł 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) już Three.js ma detektor WebGL: https://github.com/mrdoob/three.js/blob/master/examples/js/Detector.js
renderer = Detector.webgl? new THREE.WebGLRenderer(): new THREE.CanvasRenderer();
3) Sprawdź również detektor modernizr: wskaźnik https://github.com/Modernizr/Modernizr/blob/master/feature-detects/webgl.js
10
Juan Mellado do detektora Three.js był bardzo przydatny, ale wolę nie przynieść cały plik do mojego projektu. Oto więc wyodrębniona funkcja Detector.webgl().
function webglAvailable() {
try {
var canvas = document.createElement("canvas");
return !!
window.WebGLRenderingContext &&
(canvas.getContext("webgl") ||
canvas.getContext("experimental-webgl"));
} catch(e) {
return false;
}
}
i jest używany podobny do jego przykładu:
renderer = webglAvailable() ? new THREE.WebGLRenderer() : new THREE.CanvasRenderer();
Method 1/3 zawiedzie czy przeglądarka obsługuje WebGL, ale nie można go używać z jakiegoś powodu (jak kierowca na czarnej liście), który jest dlaczego metoda 2 używa funkcji z blokiem try/catch, a także sprawdza, czy kontekst może rzeczywiście zostać utworzony. –