2012-03-28 80 views

回答

59

是的,這是可能的。您可以使用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

+16

法的1/3,如果瀏覽器支持WebGL的失敗,但不能使用它的一些原因(如司機被列入黑名單),這是爲什麼方法2使用帶有try/catch塊的函數,並檢查上下文是否可以真正創建。 – 2013-07-22 16:31:47

10

胡安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();