在默认的MeshNormalMaterial例子中,立方体墙的颜色是变化的,因为它使用了这个 THREE.ShaderLib[ 'normal' ]
着色器。该着色器设置 gl_FragColor
以此 gl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );
. 有谁能给我解释一下这个公式吗?"立方体 "的哪个向量是归一化的?是否有其他因素对颜色有影响?
http:/www.smartjava.orgltjschapter-0404-mesh-normal-material.html - 例子
对不起,我的问题很愚蠢,我是新来的three.js。
这个 MeshNormalMaterial
基本上是根据对象的法线进行着色。所以在你给出的公式中 vNormal
是该片段的顶点法线。把它想象成把法线的(x,y,z)向量转化为(r,g,b)颜色。两个空间之间的转换由该公式给出,如果你有
gl_FragColor = vec4( vNormal, opacity );
那么最终的碎片颜色(即r,g,b,a值)将只取决于法线。
在你贴出的公式中,有一个常数项和一半的法线。