5

来自 Flash 背景,我习惯于通过以下方式创建片段着色器:

filters = [];

filters.push(new BasicFilter(SomeTexture));
filters.push(new NormalMapFilter(SomeOtherTexture));

myShader = new Shader(filters);

因此,我可以自由、轻松地组合多种效果,而无需每次都编写一个单独的大型着色器。

对于threejs,我注意到对于复杂的视觉效果,编写了一个着色器,如下所示:http: //threejs.org/examples/#webgl_materials_bumpmap_skin

是否可以分别编写凹凸贴图着色器和环境贴图着色器,然后在需要时动态组合它们?这样做最合适的方法是什么?

4

2 回答 2

5

直接在three.js中是不可能的。三通过将着色器代码作为字符串直接传递给 WebGL 着色器对象以进行编译来创建着色器。没有自动构建复杂着色器的机制,您必须自己编写。Three.js 方便地为着色器添加了一些制服/属性,但您必须编写对它们所做的事情。

于 2013-11-08T01:26:07.617 回答
1

您现在可以使用Effect Composer来组合着色器

于 2020-05-13T23:31:54.490 回答