2016-01-17 106 views
0

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

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

WebGLRenderer: trying to use 26 texture units while this GPU supports only 16 

该错误消息似乎相当自我explanitory - 不这意味着我只能在任何时候加载16个纹理?有没有解决的办法?我可以用我的一半物体渲染场景 - 清除纹理单元 - 然后渲染另一半?

很新的Three.js - 很抱歉,如果它是一个愚蠢的问题。

+0

我很好奇,你是如何设法使用26个纹理单元的? –

+0

我使用的是其他人提供的collada对象......我想现在还不行,我知道单个对象内的纹理数量有限制。 – Cardero

+0

@WacławJasper我使用的是其他人提供的collada对象......我想现在还不行,我知道单个对象内的纹理数量是有限的。虽然我仍然不相信,因为这个数字继续增长,而我添加了多个相同的对象 - 所以我仍然不清楚。 – Cardero

回答

1

这个数字是基于你的GPU支持,你可以看到它在这里列出WebGL Report,在Max Texture Image Units: 16下。

很多人把这个数字与单个场景有多少纹理混淆,这是错误的。此数字表示您可以为单个对象(即在单个绘图调用中)使用多少纹理。

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

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

+0

@Brendan ...谢谢 - 良好的信息。不知道你的意思是一个平局 - 是否与我添加到场景中的每个对象相同。我不会为每个对象调用draw方法 - 我想渲染器会这样做吗? – Cardero

+0

场景中的每个对象都应该成为一次绘制调用。 WebGLRenderer依次绘制每个对象1。 –

0

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

为了避免出现警告,请分析着色器,并减少着色器中渲染所需的纹理单元数。

+0

@prabindh ......好的谢谢。我需要对我正在加载的对象进行更多的分析 - 我不是自己创建它们。你知道是否有任何方法可以随时查询有多少纹理单元可用 - 也许我可以将有问题的物体固定住。 – Cardero