three.js库格式化后查看源代码后便看到了其中的奥妙所在。CanvasRenderer方法用的是2d画布(第4597行):
而WebGLRenderer用的才是真正的3d画布(第6687行)。
i = function() { var a; try { if (! (a = E.getContext("experimental-webgl",
{ alpha: v, premultipliedAlpha: A, antialias: J, stencil: K, preserveDrawingBuffer: R })))
throw "Error creating WebGL context."; } catch(b) { console.error(b) } a.getExtension("OES_texture_float") ||
console.log("THREE.WebGLRenderer: Float textures not supported."); return a } ();
因为IE是没有console对象的,而在three.js库里却有很多console调试语句。
<pre style="white-space: normal;">if (!window.console){ var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml","group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; window.console = {}; for (var i = 0; i < names.length; ++i) window.console[names[i]] = function() {} }</pre>