我實現一個簡單的着色器具有以下屬性: - 材料(環境,漫反射和鏡面) - 基本顏色定義了對象 的顏色 - 光色何時必須將兩種顏色相乘,何時需要添加?
片段着色器:(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
抱歉是一個錯誤,沒有足夠接近。你爲什麼要添加飛鏢標籤? –