所以,我的想法是做这样的事情(代码当然是简化的):
var gl;
function Renderer(canvas) {
gl = this.gl = canvas.getContext('experimental-webgl');
}
function Object() {
}
Object.prototype.render = function() {
...
gl.drawElements(...);
}
变量本身可以放置在gl
命名空间中以获得更好的一致性,也可以通过将所有代码包装到匿名函数中来进行封装,以确保它不会与任何内容发生冲突。
我可以在这里看到一个明显的权衡:在同一页面上运行多个 WebGL 画布的问题。但我完全没问题。
为什么这样做?因为否则调用任何 WebGL 函数会更痛苦,你必须在这里和那里将渲染器作为参数传递。这实际上是我不喜欢 Three.js 的地方:所有的图形内容都在 Renderer 对象中处理,这使得整个 Renderer 对象变得庞大而复杂。
如果使用全局可见上下文,则不必担心 OpenGL 常量,不必担心渲染器对象的可见性等等。
所以,我的问题是:我应该期待这种方法有什么陷阱吗?当然,除了gl
变量的潜在空虚。