OpenGL ES on iOS --- 基礎(chǔ)光照

簡述

本文記錄我記錄我學(xué)習(xí) 坐標(biāo)體系和矩陣轉(zhuǎn)換的過程,加深學(xué)習(xí)便于后續(xù)查詢,可能有些描述不夠準(zhǔn)確,或者內(nèi)容不夠充實(shí),還請多多指正,共同學(xué)習(xí).

顏色

一個沒有Alpha通道的顏色可以用一個3維向量來表示 例如 glm::vec3(1.0,1.0,1.0); 表示白色.

在現(xiàn)實(shí)世界中,一個物體的顏色是它反射的顏色導(dǎo)致的, 例如我們將純紅光 照射在純綠物體上, 因?yàn)榧t光都被吸收,所以顯示為黑色.

將吸收反射的過程用向量表示出來

glm::vec3 lightColor(0.0f, 1.0f, 0.0f); //綠色光源向量
glm::vec3 objColor(1.0f, 0.5f, 0.31f);  //物體色
glm::vec3 result = lightColor * objColor; // 光源下顏色(0.0f, 0.5f, 0.0f);

馮氏光照模型

馮氏光照模型的主要結(jié)構(gòu)由3個分量組成 環(huán)境(Ambient) 漫反射(Diffuse) 鏡面(Specular)


馮氏光照模型

環(huán)境光照

在現(xiàn)實(shí)環(huán)境下 即使在黑暗的情況下,世界上通常也會有一些光亮(如 月光), 而且即使物體不朝光源的,也會因?yàn)?其他物體的反射,使陰面有光,這種情況下 就要使用 全局照明算法 這種算法開銷大而且復(fù)雜,以后在研究 先實(shí)現(xiàn)簡單的 環(huán)境光照

所以給物體一個環(huán)境光照量,讓物體始終有一點(diǎn)顏色. 在著色器中表現(xiàn)如下

void main()
{
    float ambientStrength = 0.1;        //至少有%10的光找到物體所有面
    vec3 ambient = ambientStrength * lightColor;

    vec3 result = ambient * objectColor;
    FragColor = vec4(result, 1.0);
}

漫反射光照

模擬光源對物體的方向性影響(Directional Impact)。它是馮氏光照模型中視覺上最顯著的分量。物體的某一部分越是正對著光源,它就會越亮. 也就是光線物體表面法線的夾角越小,光線對物體的影響就越大.

漫反射效果

這樣就可以利用夾角的cos值作為參考,來修改光線對物體的影響.

片段著色器重相關(guān)實(shí)現(xiàn)

uniform vec3 lightColor;        //光源色
uniform vec3 lightPo;           //光源位置
uniform vec3 objectColor;       //物體色
uniform vec3 viewPo;            //物體位置

in vec3 outNormal;              //傳入當(dāng)前頂點(diǎn)平面的法向量
vec3 norm = normalize(outNormal);   //確保法線為單位向量
vec3 lightDir = normalize(lightPo - FragPo);  //頂點(diǎn)指向光源 單位向量  

float diff = max(dot(norm,lightDir),0.0);   //得到兩向量的cos值 小于0則則為0
vec3 diffuse = diff * lightColor;           //得到漫反射收的光源向量

法向量變換

對于法向量,它是一個方向向量,不會因?yàn)槲矬w的移動而發(fā)生變化,所以在對法向量 進(jìn)行矩陣處理時,要消除矩陣中位移部分對其造成的影響. 因此位移使用3x3矩陣 或者 將 法向量的w分量設(shè)置為0.0;

另外,若矩陣對物體進(jìn)行里不等比縮放時候,會導(dǎo)致法向量不在垂直于物體表面.


不等比縮放對法向量的影響

這種情況 則需要使用法線矩陣 來移除對法向量錯誤縮放的影響. 法線矩陣由逆矩陣轉(zhuǎn)置矩陣 組成.

    glm::transpose(glm::inverse(model));    //法線矩陣的計算
    
    mat3(transpose(inverse(model))) * aNormal;  //著色器語言的使用 使用3x3矩陣 能夠與 vec3法向量計算

鏡面光照

模擬有光澤物體上面出現(xiàn)的亮點(diǎn)郎楼。鏡面光照的顏色相比于物體的顏色會更傾向于光的顏色。鏡面光照的計算依賴于 觀察的視角, 若視線與光源在物體的反射線的夾角越小 則鏡面光照效果越好.

計算他 我們需要 觀察者位置.鏡面強(qiáng)度(鏡面效果強(qiáng)弱)

float specularStrength = 0.5;   //鏡面強(qiáng)度
vec3 viewDir = normalize(viewPo - FragPo);  //頂點(diǎn)指向觀察點(diǎn)的單位向量
vec3 reflectDir = reflect(-lightDir,outNormal); //求得光線 在 頂點(diǎn)的反射線(傳入光源指向頂點(diǎn)的向量)

float spec = pow(max(dot(viewDir, reflectDir),0.0),256.0);
// 求得夾角cos值 取256次冪 注意 pow(float,float)函數(shù)參數(shù)類型

vec3 specular = specularStrength * spec * lightColor;

256 表示高光的反光度, 反光度越高,發(fā)射光的能力越強(qiáng),散射越少 高光點(diǎn)越小


反光度影響

最后綜合

 vec3 res =(ambientStrength + diffuse + specular) * objectColor;

效果圖: 白色方塊為白色光源


效果圖.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叭喜,一起剝皮案震驚了整個濱河市社搅,隨后出現(xiàn)的幾起案子通熄,更是在濱河造成了極大的恐慌耙旦,老刑警劉巖脱羡,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異免都,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)帆竹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門绕娘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人栽连,你說我怎么就攤上這事险领。” “怎么了秒紧?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵绢陌,是天一觀的道長。 經(jīng)常有香客問我熔恢,道長脐湾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任叙淌,我火速辦了婚禮秤掌,結(jié)果婚禮上愁铺,老公的妹妹穿的比我還像新娘。我一直安慰自己闻鉴,他們只是感情好茵乱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著孟岛,像睡著了一般瓶竭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渠羞,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天在验,我揣著相機(jī)與錄音,去河邊找鬼堵未。 笑死腋舌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的渗蟹。 我是一名探鬼主播块饺,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雌芽!你這毒婦竟也來了授艰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤世落,失蹤者是張志新(化名)和其女友劉穎淮腾,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屉佳,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谷朝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了武花。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圆凰。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖体箕,靈堂內(nèi)的尸體忽然破棺而出专钉,到底是詐尸還是另有隱情,我是刑警寧澤累铅,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布跃须,位于F島的核電站,受9級特大地震影響娃兽,放射性物質(zhì)發(fā)生泄漏菇民。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玉雾。 院中可真熱鬧翔试,春花似錦、人聲如沸复旬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驹碍。三九已至壁涎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間志秃,已是汗流浹背怔球。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浮还,地道東北人竟坛。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像钧舌,于是被迫代替她去往敵國和親担汤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容