在默认的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的新人。
答案 0 :(得分:1)
MeshNormalMaterial
基本上根据法线为对象着色。所以在等式中你给vNormal
是该片段的顶点法线。可以把它想象为将法线的(x,y,z)向量转换为(r,g,b)颜色。两个空间之间的转换由该公式给出。如果你有
gl_FragColor = vec4( vNormal, opacity );
然后最终的片段颜色(即r,g,b,a值)仅取决于法线。
在你发布的等式中,有一个常数项和标准化法线的一半。