成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

OpenGL_16_鏡面反射-創(chuàng)新互聯(lián)

1,
我們在計算環(huán)境光的時候,光的強度是唯一的影響因素。然后處理漫射光的時候公式中加入了光的方向參數(shù)。
鏡面反射包含了上面所有的綜合因素并且添加了一個新的元素:觀察者的位置。
鏡面反射時光以一定角度照射到物體表面,同時會在法線的另一側(cè)對稱的角度上反射出去,如果觀察者剛好在反射光線的路徑上那么就會看到格外強烈的光線。

鏡面反射最終的結(jié)果是物體在從某個角度看上去會十分明亮,而移動開后這個光亮又會消失?,F(xiàn)實中好的鏡面反射的例子是金屬物體,這些物體有時候看上去由于太亮了導(dǎo)致看不到他本來的顏色而是直接照向你眼睛的白色的亮光。但這種屬性在其他的一些材料上是沒有的(比如:木頭)。很多東西根本不會發(fā)光,不管光源從什么角度照射以及觀察者在什么位置。所以,鏡面反射光的存在更取決于反射物體的材料性質(zhì)而不是光源本身。


'I' 是入射光
'N' 是表面法線
'R' 反射光,和入射光'I'關(guān)于法線對稱,但方向相反
'V' 是從入射光和反射光交點處(入射點)到觀察者眼睛的向量,表示觀察者視線
'α' 反射光'R'和觀察者視線'V'的夾角

我們將使用夾角'α'來對鏡面反射光現(xiàn)象進行建模。有一點可以看出當(dāng)觀察者視線和反射光重合時(夾角為0),反射光的強度大。觀察者慢慢從反射光'R'移開時,夾角慢慢變大,而我們希望隨著角度增大反射光要慢慢衰弱。明顯,這里又要使用差積運算來計算夾角'α'的余弦值了,這個值將作為計算鏡面反射光公式的反射參數(shù)。當(dāng)'α'為0時余弦值為1,這是我們反射參數(shù)的大值。隨著夾角'α'增大余弦值慢慢減小,直到夾角達到90度時就徹底沒有鏡面反射的效果了。當(dāng)然,夾角大于90度時余弦值為負,也沒有任何反射效果,也就是觀察者不在反射光的路徑范圍內(nèi)。

我們要用到'R'和'V'來計算夾角'α'。'V'可以通過世界坐標系中觀察者位置和光的入射點位置的差計算得到。camera已經(jīng)在世界空間進行維護了,我們只需要將它的位置傳給shader著色器。
另外上面的圖是經(jīng)過簡化了的模型,光在物體表面只有一個入射點(事實上不是,這里只是為了好分析)。
事實上,整個三角形都被點亮了(假設(shè)它面向光源),因此我們要計算每一個像素的鏡面反射效果(和漫反射光的計算一樣)。
我們必須要知道每個像素在世界空間的位置,這個不難:可以將頂點變換到世界空間,讓光柵器對像素的世界空間位置進行插值并將結(jié)果傳給片段著色器。事實上,這個和之前教程中對法線的處理操作是一樣的。
最后是要使用'I'向量(由應(yīng)用傳給shader)來計算反射光線'R'。如下圖:

首先要強調(diào)向量沒有起點的概念,所有方向相同且長度相同的向量都是同一個向量。
因此,圖中將入射光向量'I'復(fù)制到表面下面位置向量本身是不變的。
目標是求向量'R',根據(jù)向量的加法,'R'等于'I'+'V'。

'I'是已知的,所以我們要求'V'。
注意法線'N'的反向向量為'-N', 計算'I'和'-N'的點積可以得到'I'在'-N'上的投影,這也是'V'的模長度的一半。
另外'V'和'N'的方向是相同的,所以只要用計算的那個投影長度乘以單位向量'N'再乘以2就是向量'V'了。

GLSL提供了一個叫做'reflect'的內(nèi)部函數(shù)就是做的上面這個計算??梢钥聪旅孢@個函數(shù)在shader中的用法。這里得出計算鏡面反射的最終公式:

開始先是將光的顏色和物體表面的顏色相乘,這個和在計算環(huán)境光以及漫反射光時一樣。得到的結(jié)果再和材料的鏡面反射強度參數(shù)('M')相乘。如果材料沒有反射性能,比如木頭,那么鏡面反射參數(shù)就為0,整個公式的結(jié)果也就為0了,而像金屬這種發(fā)光材料鏡面反射能力就會很強。之后再乘以光線和觀察者視線夾角的余弦值,這也是最后一個調(diào)整鏡面反射光強度的參數(shù)('鏡面參數(shù)'或者叫做'發(fā)光參數(shù)')。

這三個參數(shù)都是獨立于光線本身的,因為當(dāng)同一束光照到不同的材料上(比如:木頭和金屬)時會有不同的反射發(fā)光效果。
目前對材料屬性的使用模型還是很局限的,同一個繪制回調(diào)的所有三角形會得到這些屬性的一樣的值。如果同一個模型的不同部分的三角形圖元是不同的材料,這樣就不合理了。在后面的教程中講關(guān)于mesh網(wǎng)格的加載時我們會在一個模塊中產(chǎn)生不同的鏡面參數(shù)值并作為頂點緩沖器的一部分(而不是shader的一個參數(shù)),這樣我們就可以在同一個繪制回調(diào)中使用不同的鏡面光照參數(shù)來處理三角形圖元。

2,

上面頂點著色器多了最后一行代碼,世界變換矩陣(之前用來變換法線的那個世界變換矩陣)這里用來將頂點的世界坐標傳給片段著色器。



為市中等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及市中網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、市中網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

網(wǎng)頁名稱:OpenGL_16_鏡面反射-創(chuàng)新互聯(lián)
分享URL:http://jinyejixie.com/article32/pgdsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、電子商務(wù)、標簽優(yōu)化、定制網(wǎng)站、小程序開發(fā)營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
高清| 阳江市| 静宁县| 云龙县| 石景山区| 富源县| 观塘区| 兴安盟| 赣州市| 正镶白旗| 峡江县| 全南县| 赤峰市| 台安县| 麻江县| 黑水县| 上虞市| 彰武县| 都兰县| 武邑县| 安化县| 当雄县| 德安县| 邛崃市| 宽甸| 北票市| 寿宁县| 来宾市| 基隆市| 通道| 海城市| 盘山县| 海城市| 金湖县| 龙井市| 仙桃市| 驻马店市| 石门县| 翁源县| 北安市| 吉林省|