1

我注意到纹理在所有着色器中都有一个名为“值”的字段,但似乎从未使用过这个字段。

例子 :

tDiffuse: { type: "t", value: 0, texture: null },

这个领域的目的是什么?

谢谢

4

1 回答 1

1

它被使用。

它定义了纹理需要存储在哪个槽中。插槽是着色程序可以访问纹理槽采样器的地方。这确实大部分是 0,因为我们在着色器中只使用了 1 个纹理。但是如果我们想要在着色器中访问多个纹理,则需要将值更改为必要的插槽数。

就像你可以在这里看到的:

https://github.com/gero3/three.js/blob/master/src/renderers/WebGLShaders.js#L1392-1397

地图是第一个纹理。(slot 0) envMap 是第二个纹理。(slot 1) lightMap 是第三个纹理。(插槽 2)

对于您在 shaderprogram 中使用的每个纹理,您必须选择一个新插槽。

于 2012-08-08T10:45:56.533 回答