MeshNormalMaterial颜色

时间:2015-04-28 17:08:21

标签: three.js shader mesh fragment-shader material

在默认的MeshNormalMaterial示例中,立方体墙的颜色正在改变,因为它使用此THREE.ShaderLib[ 'normal' ]着色器。此着色器通过此gl_FragColor设置gl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );。谁能解释我这个公式?哪个立方体矢量归一化?还有其他因素会对颜色产生影响吗?

http://www.smartjava.org/ltjs/chapter-04/04-mesh-normal-material.html - 示例

抱歉愚蠢的问题,我是three.js的新人。

1 个答案:

答案 0 :(得分:1)

MeshNormalMaterial基本上根据法线为对象着色。所以在等式中你给vNormal是该片段的顶点法线。可以把它想象为将法线的(x,y,z)向量转换为(r,g,b)颜色。两个空间之间的转换由该公式给出。如果你有

gl_FragColor = vec4( vNormal, opacity );

然后最终的片段颜色(即r,g,b,a值)仅取决于法线。

在你发布的等式中,有一个常数项和标准化法线的一半。