什么是在THREE.WebGLUniforms中执行的h函数?

时间:2017-09-17 22:04:09

标签: javascript three.js

我正在为一个WebGL项目进行优化,它基本上只是一个附加到覆盖画布的四边形的碎片着色器。着色器使用相当昂贵的循环来投射光线通过每个像素,直到它们到达某个地形。我们的想法是,不是计算每个像素的光线方向,而是计算屏幕每个角落的光线方向,然后将它们作为制服传递,然后根据uv进行插值。我已经在着色器代码中测试了这个想法而没有使用制服,它的工作原理除了它减慢速度而不是加速它。

当我尝试在实现制服的整个过程中加载网页时,Firefox说存在类型错误,{。1}}未在three.js第12914行中定义。

转到第12914行我发现:

b

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) }, 内。

所以我的问题是:这个函数是什么,它的第二个参数是什么?

更新:

我遗漏的一个重要细节是,如果我将Firefox打开超过几秒钟,它会崩溃。

2 个答案:

答案 0 :(得分:2)

非常确定它是this function

上传任何在glsl中显示为vec3的制服是一个辅助函数。这包括THREE.Vector3THREE.Color和包含三个元素的数组。 See also

所以你的" b没有定义"意味着一些应该包含向量,颜色或数组的统一值是未定义的。您应该让调试器停止异常,并查看堆栈以查看是哪个统一。

答案 1 :(得分:1)

你正在使用Three.js的缩小版本。从您的threejs脚本名称中删除.min.,例如使用https://cdnjs.cloudflare.com/ajax/libs/three.js/87/three.js而不是https://cdnjs.cloudflare.com/ajax/libs/three.js/87/three.min.js。仅将缩小版本用于生产部署,而不是用于本地开发。