Three.js用完了纹理单元

时间:2016-01-17 10:42:37

标签: javascript three.js webgl

我使用Three.js(r73)编写了一个应用程序,允许用户使用ColladaLoader加载多个.dae文件。

如果用户选择足够数量的对象,纹理将不会显示任何对象...此时我得到了这个:

home

错误消息似乎相当自我解释 - 这是否意味着我一次只能加载16个纹理?有没有解决的办法?我可以用一半的物体渲染我的场景 - 清除纹理单位 - 然后渲染另一半吗?

对于Three.js来说相当新 - 如果这是一个愚蠢的问题,那就很抱歉。

2 个答案:

答案 0 :(得分:3)

此数字取决于您的GPU支持的内容,您可以在WebGL ReportMax Texture Image Units: 16下看到它。

许多人会将此数字与单个场景中可以拥有的纹理数量混淆,这是错误的。此数字表示可用于单个对象的纹理数量(即在单个绘图调用中)。

因此,如果你有一个非常复杂的对象,有数百个单独的纹理。您必须找到一种方法将纹理合并在一起,或者将对象拆分为多个可以单独绘制的对象。

但是,如果您绘制1000个单独的对象,每个对象具有不同的纹理,这不应该是一个问题。

答案 1 :(得分:0)

警告来自超过“总”纹理单位的最大数量,顶点纹理单位。请参阅WebGLRenderer.js,函数getTextureUnit()以了解此背后的原因并打印此错误消息。 (例如,https://searchcode.com/codesearch/view/96702746/,第4730行)

要避免警告,请分析着色器,并减少着色器中所需的纹理单位数,以进行渲染。