我实现一个简单的着色器具有以下属性: - 材料(环境,漫反射和镜面) - 基本颜色定义了对象 的颜色 - 光色何时必须将两种颜色相乘,何时需要添加?
片段着色器:(vColor是物体的基本颜色)
vec3 lightDir = normalize(vec3($uLightPos.xyz - vPosInEye.xyz));
vec3 viewerPos = normalize(vec3(-vPosInEye.xyz));
vec3 specularReflection = normalize(-reflect(lightDir, vNormal));
float diffFactor = max(dot(vNormal, lightDir), 0.0);
vec4 Id = $uIdColor * diffFactor * vColor ;
vec4 Ia = $uIaColor * vColor;
vec4 Is = clamp($uIsColor * pow(max(dot(specularReflection, viewerPos), 0.0), $uIsShininess), 0.0, 1.0);
gl_FragColor = (Id + Ia + Is) + $uLightColor;
正如你所看到的,我将物质的环境颜色乘以物体的基色。这似乎是对的,因为我想把这些颜色混合在一起。
在“Open GL ES 2.0编程指南”一书中,实现方式与此相同。在最后一行中,我添加了灯光的颜色。
我试着先乘以颜色,但后来我得到了奇怪的结果:黄色*蓝色导致黑色(这是明确的,因为黄色是(1.0,1.0,0)和蓝色(0.0,0.0,1.0),所以我换成了* 。与+这似乎产生正确的颜色(白色)
所以我的问题是:是否有一个经验法则,当我要乘两个颜色放在一起,何时添加它们
你必须根据你想要得到的效果/结果来做! – Vallentin
@GünterZöchbauer为什么你将着色器代码标记为Dart? – Fox32
抱歉是一个错误,没有足够接近。你为什么要添加飞镖标签? –