出身于Flash背景的我,习惯于用下面的方式来创建一个片段着色器。
filters = [];
filters.push(new BasicFilter(SomeTexture));
filters.push(new NormalMapFilter(SomeOtherTexture));
myShader = new Shader(filters);
因此,我可以自由而轻松地组合多个效果,而不需要每次都单独编写一个大型的shader。
在threejs的情况下,我注意到,对于复杂的视觉效果,就像这里一样,写一个单一的shader。http:/threejs.orgexamples#webgl_materials_bumpmap_skin。
是否可以分别编写凹凸图着色器和环境图着色器,然后在需要时将它们动态组合?最正确的方法是什么?
在three.js中无法直接实现。Three通过将着色器代码作为字符串直接传递给WebGL着色器对象进行编译来创建着色器。没有自动构建复杂着色器的机制,你必须自己编写。Three.js很方便地给着色器添加了几个uniformsattributes,但你必须写出用它们做什么。
你可以使用 效果合成器 现在要结合着色器