2016-04-12 24 views
0

在per-fragment點光源中,點光源計算中頂點正常播放扮演什麼角色?OpenGL - 在點光源計算中頂點正常播放起什麼作用?

我的理解是,一個片段的亮度完全取決於它與光源的距離,而且方向矢量是不相關的。

例的Shader

precision mediump float; 
uniform vec3 u_LightPos; 

varying vec3 v_Position; 
varying vec4 v_Color; 
varying vec3 v_Normal; 

void main() 
{ 
    float distance = length(u_LightPos - v_Position); 
    vec3 lightVector = normalize(u_LightPos - v_Position); 
    float diffuse = max(dot(v_Normal, lightVector), 0.1); 
    diffuse = diffuse * (1.0/(1.0 + (0.25 * distance * distance))); 
    gl_FragColor = v_Color * diffuse; 
} 

回答

1

看起來你正在使用朗伯漫射照明。在這種情況下,表面亮度與入射光強度(等式中的反平方項)成正比,並且還與表面法線與入射光方向之間的夾角的餘弦成比例(等式中的點積)。

經過一番思考,這使得很多感覺。考慮兩種極端情況:你會期望垂直於手電筒光束的紙張比平行於光束的紙張看起來要亮得多。

欲瞭解更多信息,請參閱相關維基百科頁面的this section

+0

謝謝,我會閱讀它。有沒有獨立於方向的交替點光照算法? –

+0

我從來沒有用過。這很奇怪,因爲調整物體的視角不會影響表面光強度。您可以隨時刪除點積字詞,並在沒有它的情況下查看它的外觀。 – andars

+0

好的。所以使用朗伯很標準,謝謝。 –