有没有使用过 three.js 的人能告诉我如何检测 Webgl 支持,如果不支持,是否可以回退到标准 Canvas 渲染?
有没有使用过 three.js 的人能告诉我如何检测 Webgl 支持,如果不支持,是否可以回退到标准 Canvas 渲染?
是的,这是可能的。您可以使用CanvasRenderer
代替WebGLRenderer
。
关于WebGL检测:
1)阅读此WebGL维基文章: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已经有一个WebGL检测器了:https://github.com/mrdoob/three.js/blob/master/examples/js/Detector.js
renderer = Detector.webgl? new THREE.WebGLRenderer(): new THREE.CanvasRenderer();
3) 还要检查Modernizr检测器: https://github.com/Modernizr/Modernizr/blob/master/feature-detects/webgl.js
Juan Mellado提供的Three.js检测器指针非常有用,但我不想将整个文件引入我的项目中。因此,这里提供了提取的Detector.webgl()函数。
function webglAvailable() {
try {
var canvas = document.createElement("canvas");
return !!
window.WebGLRenderingContext &&
(canvas.getContext("webgl") ||
canvas.getContext("experimental-webgl"));
} catch(e) {
return false;
}
}
并且它的使用方式类似于他的示例:
renderer = webglAvailable() ? new THREE.WebGLRenderer() : new THREE.CanvasRenderer();
Detector.js
已经移动到https://github.com/mrdoob/three.js/blob/master/examples/js/WebGL.js。 - ngalstyan