最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
OpenGL_15_漫反射-創(chuàng)新互聯(lián)

1,
漫射光和環(huán)境光的主要不同是漫射光的特性依賴光線的方向,而環(huán)境光完全忽略光的方向。當(dāng)只有環(huán)境光時(shí)整個(gè)場(chǎng)景是被均勻照亮的,而漫射光使物體朝向它的那一面比其他背向光的面要更亮。漫射光還增加了一個(gè)光強(qiáng)度的變化現(xiàn)象,光的強(qiáng)度大小還取決于光線和物體表面的角度。

漫射光模型是建立在蘭伯特余弦定律上的,光線的強(qiáng)度和觀察者視線與物體表面法線夾角的余弦值成正比(夾角越大光強(qiáng)度越?。?。注意這里略有變化,我么使用的是光線的方向而不是觀察者視線(在鏡面發(fā)射中用到)的方向。
為了計(jì)算光的強(qiáng)度我們要引入光線和物體表面法線(蘭伯特定律中更加通用的概念叫做'directionaly proportional')夾角的余弦值作為一個(gè)參數(shù)變量??聪旅孢@幅圖:

圖中四條光線以不同的角度照到表面上(光線僅僅是方向不同),綠色的箭頭是表面法向量,從表面垂直往外發(fā)出。
光線A的強(qiáng)度是大的,因?yàn)楣饩€A和法線的夾角為0,余弦值為大的1,
也就是這個(gè)光線的強(qiáng)度(三個(gè)通道的三個(gè)0-1的值)和表面顏色相乘每個(gè)顏色通道都是乘以1,這是漫射光強(qiáng)度大的情況了。
光線B以一定角度(0-90之間)照射到表面,這個(gè)角度就是光線和法線的夾角,那么夾角的余弦值應(yīng)該在0-1之間,表面顏色值最后要和這個(gè)角度的余弦值相乘,那么得到的光的強(qiáng)度一定是比光線A要弱的。
對(duì)于光線C和D情況又不同了。C從表面的一側(cè)入射,光線和表面的夾角為0,和法線垂直,對(duì)應(yīng)的余弦值為0,這會(huì)導(dǎo)致光線C對(duì)表面照亮沒有任何效果。光線D從表面的背面入射和法線成鈍角,余弦值為負(fù)比0還小甚至小到-1。所以光線D和C一樣都對(duì)物體表面沒有照亮作用。

2,
可以看到表面法線對(duì)漫射光的計(jì)算很重要。上面的例子是很簡(jiǎn)化的:表面是平坦的直線只需要考慮一條法線。而真實(shí)世界中的物體有無數(shù)的多邊形組成,每個(gè)多邊形的法線和附近的多邊形基本都不一樣。例如:

因?yàn)橐粋€(gè)多邊形面上分布的任意法向量都是一樣的,足以用其中一個(gè)代表來計(jì)算頂點(diǎn)著色器中的漫射光。
一個(gè)三角形上的三個(gè)頂點(diǎn)會(huì)有相同的顏色而且整個(gè)三角形面的顏色都相同,但這樣看上去效果并不好,每個(gè)多邊形之間的顏色值都不一樣這樣我們會(huì)看到多邊形之間邊界的顏色變化不平滑。
因此這個(gè)明顯是需要進(jìn)行優(yōu)化的:頂點(diǎn)法線。
頂點(diǎn)法線是共用一個(gè)頂點(diǎn)的所有三角形法線的平均值。事實(shí)上我們并沒有在頂點(diǎn)著色器中計(jì)算漫射光顏色,而只是將頂點(diǎn)法線作為一個(gè)成員屬性傳給片段著色器。
光柵器會(huì)得到三個(gè)不同的法向量并對(duì)其之間進(jìn)行插值運(yùn)算。
片段著色器將會(huì)對(duì)每個(gè)像素計(jì)算其特定的插值法向量對(duì)應(yīng)的顏色值。
這樣使用那個(gè)插值后得到的每個(gè)像素特定法向量,我們對(duì)漫射光的計(jì)算可以達(dá)到像素級(jí)別。效果是光照效果在每個(gè)相鄰三角形面之間會(huì)平滑的變化。這種技術(shù)叫做Phong著色(Phong Shading)。下面是頂點(diǎn)法線插值后的樣子:


3,
頂點(diǎn)和他們的法線都定義在本地坐標(biāo)系空間,并且都在頂點(diǎn)著色器中被我們提供給shader的WVP矩陣進(jìn)行了變換,然后到裁剪空間。
然而,在世界坐標(biāo)系中來定義光線的方向才是最合理的,畢竟光線的方向決定于世界空間中某個(gè)地方的光源將光線投射到某個(gè)方向(甚至太陽(yáng)都是在世界空間中,只是距離極遠(yuǎn))。所以,在計(jì)算之前,我們首先要將法線向量變換到世界坐標(biāo)系空間。

4,




5,

輸入定點(diǎn)、紋理、法線。



在漢南等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),網(wǎng)絡(luò)營(yíng)銷推廣,外貿(mào)網(wǎng)站制作,漢南網(wǎng)站建設(shè)費(fèi)用合理。

6,

初始化光
_gl_shardes->gluniform_light(_directionallight);



gDirectionalLight.Direction光源向量不是單位化的。如果對(duì)所有像素的同一個(gè)向量都進(jìn)行反復(fù)單位化會(huì)很浪費(fèi)GPU資源。

因此我們只要保證應(yīng)用程序傳遞的向量在draw call之前被單位化即可。
direction.Normalize();

glUniform3f(_dirlight_directionlocation, direction.x, direction.y, direction.z);


分享文章:OpenGL_15_漫反射-創(chuàng)新互聯(lián)
鏈接分享:http://fisionsoft.com.cn/article/dhohed.html