【发布时间】:2017-09-18 08:39:35
【问题描述】:
我正在对 WebGL 项目进行优化,该项目基本上只是一个附加到覆盖画布的四边形的片段着色器。着色器使用一个相当昂贵的循环来投射光线穿过每个像素,直到它们到达某个地形。这个想法是,而不是计算每个像素的光线方向,而是计算屏幕每个角落的光线方向并将它们作为制服传递,然后根据 uv 在它们之间进行插值。我已经在不使用制服的情况下在着色器代码中测试了这个想法,它可以工作,只是它会减慢而不是加快速度。
当我在实现制服的整个事情时尝试加载网页时,Firefox 说存在类型错误,b 未在 three.js 行 12914 中定义。
转到我发现的第 12914 行:
h = function(a, b) {
void 0 !== b.x ? a.uniform3f(this.addr, b.x, b.y, b.z) : void 0 !== b.r ? a.uniform3f(this.addr, b.r, b.g, b.b) : a.uniform3fv(this.addr, b)
},
在Three.WebGLUniforms内。
所以我的问题是:这个函数是做什么用的,它的第二个参数是什么?
更新:
我遗漏的一个重要细节是,如果我将 Firefox 打开超过几秒钟,它就会崩溃。
【问题讨论】:
-
用你的调试器升级调用树,看看它是从哪里调用的。
标签: javascript three.js