我试图弄清楚three.js的工作方式,并尝试了一些着色器调试器。
我添加了两个具有基本材质的简单平面(没有任何阴影模型的单一颜色),它们在渲染过程中旋转。
首先,我的问题是...为什么three.js使用单个着色器程序(请参阅WebGL上下文函数.useProgram()
)来同时处理两个网格。我想对象是相同的,这就是为什么出于性能原因,单个着色器程序将类似对象用于该对象的原因。
但是...我更改了three.js应用程序源代码,现在场景中有一个平面和一个立方体正在旋转。
让我们再次看一下着色器调试器:
在这里,您可以看到three.js再次使用了一个着色器程序,但是对象现在不同。而这一刻对我来说还不清楚。
如果看那个着色器,它似乎是非常通用且庞大的着色器程序,并且还有两个不同的着色器程序,它们已编译但未使用。
那么,为什么three.js使用单个着色器程序?那些正确的(或可能不是)原因是什么?
着色器中完成的大多数工作都与网格的材质部分有关,而不是几何形状。
在webgl(或opengl)中,您所了解的几何形状(如果是立方体,球体或其他任何东西)是无关紧要的。
如果您谈论几何的构造方式,那将更有意义。但是,在这些日子里,超过3个顶点的面消失了,很少使用三角带,这是几种不同的几何形状... face3几何形状,线几何形状,粒子几何形状和缓冲区几何形状。
大多数情况下,使用不同材质球的关键区别在于材质。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句