青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

永遠也不完美的程序

不斷學習,不斷實踐,不斷的重構……

常用鏈接

統計

積分與排名

好友鏈接

最新評論

The Complete Effect and HLSL Guide 函數

上一章里,我們學習了HLSL主要的語法元素。現在,唯一沒有講解的只剩下函數了,包括如何聲明與定義函數,如何在shader中使用函數。函數是高級語言中的重要組成部分,它在shader中也同樣扮演了重要角色。HLSL語法允許使用兩種類型的函數。內置(或固有)函數為shader提供了一個預定義函數庫,同時也為特定著色構架提供了某些特殊指令。

       當然,你可以創建自定義函數。自定義函數可以用來把shader組織為一個整體,也可以用來打包部分希望重用的功能。

       接下來的幾節里,我將會討論兩種類型的函數,在最后還會講解如何用函數定義shader。先來看看HLSL提供的豐富內置函數庫吧。

 

內置函數

 

       HLSL著色語言包含了一系列廣泛的,內置,或固有函數。這些函數在開發shader時相當有用。它們提供了從數學計算到紋理采樣等廣泛的功能。先依次瀏覽一下這些函數。

 

3-1 HLSL內置函數

函數名            用法

abs                         計算輸入值的絕對值。

acos                        返回輸入值反余弦值。

all                           測試非0值。

any                         測試輸入值中的任何非零值。

asin                         返回輸入值的反正弦值。

atan                        返回輸入值的反正切值。

atan2                       返回y/x的反正切值。

ceil                         返回大于或等于輸入值的最小整數。

clamp                      把輸入值限制在[min, max]范圍內。

clip                         如果輸入向量中的任何元素小于0,則丟棄當前像素。

cos                         返回輸入值的余弦。

cosh                       返回輸入值的雙曲余弦。

cross                      返回兩個3D向量的叉積。

ddx                         返回關于屏幕坐標x軸的偏導數。

ddy                         返回關于屏幕坐標y軸的偏導數。

degrees                   弧度到角度的轉換

determinant              返回輸入矩陣的值。

distance                   返回兩個輸入點間的距離。

dot                          返回兩個向量的點積。

exp                         返回以e為底數,輸入值為指數的指數函數值。

exp2                       返回以2為底數,輸入值為指數的指數函數值。

faceforward             檢測多邊形是否位于正面。

floor                       返回小于等于x的最大整數。

fmod                       返回a / b的浮點余數。

frac                        返回輸入值的小數部分。

frexp                       返回輸入值的尾數和指數

fwidth                     返回 abs ( ddx (x) + abs ( ddy(x))

isfinite                     如果輸入值為有限值則返回true,否則返回false

isinf                        如何輸入值為無限的則返回true

isnan                       如果輸入值為NANQNAN則返回true

ldexp                       frexp的逆運算,返回 x * 2 ^ exp

len / lenth                返回輸入向量的長度。

lerp                         對輸入值進行插值計算。

lit                            返回光照向量(環境光,漫反射光,鏡面高光,1)。

log                          返回以e為底的對數。

log10                      返回以10為底的對數。

log2                        返回以2為底的對數。

max                        返回兩個輸入值中較大的一個。

min                         返回兩個輸入值中較小的一個。

modf                       把輸入值分解為整數和小數部分。

mul                         返回輸入矩陣相乘的積。

normalize                 返回規范化的向量,定義為 x / length(x)

pow                        返回輸入值的指定次冪。

radians                    角度到弧度的轉換。

reflect                     返回入射光線i對表面法線n的反射光線。

refract                     返回在入射光線i,表面法線n,折射率為eta下的折射光線v

round                      返回最接近于輸入值的整數。

rsqrt                       返回輸入值平方根的倒數。

saturate                   把輸入值限制到[0, 1]之間。

sign                        計算輸入值的符號。

sin                          計算輸入值的正弦值。

sincos                     返回輸入值的正弦和余弦值。

sinh                        返回x的雙曲正弦。

smoothstep              返回一個在輸入值之間平穩變化的插值。

sqrt                         返回輸入值的平方根。

step                        返回(x >= a? 1 : 0

tan                          返回輸入值的正切值。

fanh                        返回輸入值的雙曲線切線。

transpose                 返回輸入矩陣的轉置。

tex1D*                    1D紋理查詢。

tex2D*                    2D紋理查詢。

tex3D*                    3D紋理查詢。

texCUBE*                立方紋理查詢。

 

       為了貼近實際,舉個例子來展示如何使用這些函數吧。假設你需要把紋理映射到一個像素上,并且使用方向光來照亮這個像素。要完成這個任務,必須先計算光源對像素顏色的貢獻,然后查找紋理顏色,最后把這兩個顏色混合起來。首先,為了計算方向光的貢獻,需要計算像素法線和光源方向的點積。使用dot函數可以很方便的完成這一步計算:

 

       LightIntensity = dot ( LightDirection , PixelNormal);

 

       這里可能會出現一點小小的問題,如果像素法線背對著光源方向,那么得到的亮度將為負值。必須保證亮度在01之間,以避免這種效果。怎么做呢?很幸運,saturate函數能完成這個任務,修改上面的代碼:

 

       LightIntensity = saturate ( dot ( LightDirection , PixelNormal ) );

 

       在把燈光顏色添加到物體上之前,還需要從紋理中獲得像素的顏色。假設像素已經包含了適當的紋理坐標并且有一張簡單的2D紋理,那么紋理采樣的代碼如下:

 

       PixelColor = tex2D ( objectTexture , TextureCoord ) ;

 

       最后一步,就是對燈光和像素顏色進行混合。這里,我們需要燈光顏色,燈光亮度以及像素顏色作為參數。計算很簡單,但你應該注意shader構架的矢量天性是如何對顏色中的所有分量同時起作用的。

 

       FinalColor = ( LightColor * LightIntensity) * PixelColor ;

 

       這個例子雖然簡單,但是它展示了HLSL的強大威力,僅僅使用三行代碼就能完成簡單的光照。在進入下一個主題之前,需要指出根據完成功能的不同,內建函數可以接收不同的參數。另外,由于硬件性能的不同,部分內建函數并不是在所有頂點和像素著色器版本上都可用。

posted on 2008-08-08 15:29 狂爛球 閱讀(1703) 評論(0)  編輯 收藏 引用 所屬分類: 圖形編程

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一本色道久久| 国产日产欧美一区| 中日韩男男gay无套| 亚洲黄页视频免费观看| 久久久久国产精品一区| 久久综合精品国产一区二区三区| 性伦欧美刺激片在线观看| 先锋a资源在线看亚洲| 久久精品30| 夜夜嗨av一区二区三区四季av| 欧美日韩免费一区二区三区| 亚洲欧美一区二区激情| 欧美激情一区在线| 久久精品人人| 亚洲一区二区三区精品在线| 国产一区二区三区的电影| 免费国产一区二区| 欧美激情第三页| 欧美日韩一区二区欧美激情| 国产精品久久久久久久久久ktv| 国产视频在线观看一区| 精品1区2区3区4区| 亚洲网站视频| 久久精品一区二区三区四区 | 亚洲高清不卡| 亚洲一区二区三区777| 久久露脸国产精品| 亚洲欧洲一区二区天堂久久| 亚洲制服av| 欧美黄色成人网| 国产麻豆午夜三级精品| 亚洲剧情一区二区| 久久亚洲春色中文字幕久久久| 亚洲电影免费在线观看| 午夜一区在线| 欧美色中文字幕| 在线精品福利| 先锋影音网一区二区| 欧美激情中文不卡| 午夜精品久久久久久久久久久久久 | 尤物九九久久国产精品的分类| 亚洲欧洲一区二区三区在线观看 | 亚洲国产一区在线观看| 久久久综合视频| 亚洲在线观看视频| 欧美区二区三区| 亚洲激情婷婷| 亚洲综合色丁香婷婷六月图片| 国产毛片精品国产一区二区三区| 国产精品天天看| 亚洲成人影音| 久久免费视频一区| 欧美一区二区在线观看| 欧美日本亚洲韩国国产| 久久久久久久999精品视频| 狠狠狠色丁香婷婷综合久久五月| 国产精品国产三级国产专播精品人| 亚洲电影免费| 久久综合九九| 久久人人97超碰精品888| 国产亚洲一二三区| 午夜精品福利电影| 亚洲私人黄色宅男| 国产精品免费看| 亚洲一区二区三区欧美| 99re6热在线精品视频播放速度| 欧美成人精品| 亚洲精品午夜| 91久久中文| 欧美日韩精品中文字幕| 一区二区高清在线| 亚洲美女精品久久| 欧美日韩一区二区三区免费看| 艳女tv在线观看国产一区| 亚洲第一精品在线| 欧美日韩1080p| 午夜一区二区三区在线观看| 亚洲欧美另类久久久精品2019| 国产精品美女主播| 久久综合999| 免费成人av在线看| 夜夜嗨av色综合久久久综合网| 夜夜嗨av一区二区三区中文字幕| 欧美视频国产精品| 久久精品亚洲| 欧美1区2区| 亚洲欧美日韩在线高清直播| 香蕉尹人综合在线观看| 亚洲高清毛片| 在线视频你懂得一区| 韩日精品中文字幕| 亚洲国产精品国自产拍av秋霞| 欧美午夜在线一二页| 羞羞答答国产精品www一本| 久久久精品国产99久久精品芒果| 亚洲日本va午夜在线影院| 亚洲婷婷国产精品电影人久久| 黑人巨大精品欧美黑白配亚洲| 亚洲国产成人精品久久久国产成人一区 | 欧美日韩一区二区三区高清| 日韩一区二区免费看| 亚洲欧美国内爽妇网| 一区二区三区视频在线观看| 久久免费的精品国产v∧| 亚洲欧美久久久久一区二区三区| 韩国一区二区在线观看| 国产日韩精品一区| 欧美国产日韩一区二区在线观看| 欧美午夜不卡在线观看免费| 久久亚洲影院| 欧美偷拍另类| 亚洲欧洲在线播放| 伊人成人在线视频| 亚洲欧美激情精品一区二区| 亚洲精品一区二区三区婷婷月| 欧美在线高清| 日韩亚洲综合在线| 久久精品卡一| 欧美在线观看www| 欧美视频观看一区| 亚洲国产美女| 在线日韩成人| 久久久www免费人成黑人精品| 亚洲欧美色一区| 国产精品qvod| 日韩视频亚洲视频| 亚洲日本精品国产第一区| 久久xxxx精品视频| 久久大综合网| 国产精品视频不卡| 一区二区三区四区在线| 亚洲一区二区精品| 欧美日韩亚洲三区| 日韩一区二区精品葵司在线| 一区二区欧美在线| 欧美黑人多人双交| 欧美福利视频| 亚洲精品免费在线| 欧美高清一区| 亚洲精品一区在线| 一本色道久久综合亚洲精品小说| 欧美刺激午夜性久久久久久久| 免费一区二区三区| 亚洲国产日韩欧美在线图片| 另类激情亚洲| 亚洲国产99精品国自产| 亚洲最新视频在线| 国产精品家教| 欧美亚洲视频一区二区| 久久在线精品| 亚洲欧洲视频| 欧美精品色网| 中国亚洲黄色| 久久aⅴ国产欧美74aaa| 伊人色综合久久天天| 男女激情久久| 一本色道久久综合狠狠躁篇怎么玩| 亚洲视频自拍偷拍| 夜夜嗨av一区二区三区免费区| 国产在线精品一区二区夜色| 午夜免费日韩视频| 久久精品国产欧美亚洲人人爽| 一区二区三区中文在线观看| 久久综合一区二区三区| 亚洲高清三级视频| 亚洲视频免费看| 国产亚洲电影| 裸体歌舞表演一区二区| 亚洲裸体视频| 欧美中文字幕在线| 亚洲激情综合| 国产精品入口麻豆原神| 久久九九国产| 亚洲人成网站777色婷婷| 性欧美videos另类喷潮| 在线观看精品视频| 欧美日韩精品二区第二页| 亚洲你懂的在线视频| 亚洲成色777777女色窝| 午夜一区在线| 日韩视频在线一区二区三区| 国产精品国产a级| 久久亚洲图片| 亚洲欧美日韩中文播放| 欧美成人性生活| 午夜精品久久久久久久久久久| 1024成人| 国产欧美日韩视频一区二区三区| 久久五月婷婷丁香社区| 99国产精品99久久久久久粉嫩| 久久全球大尺度高清视频| 中国成人亚色综合网站| 136国产福利精品导航网址| 国产精品视频网| 欧美日韩国产二区| 久久综合激情| 久久精品国产亚洲aⅴ| 亚洲免费观看| 亚洲欧洲综合| 欧美电影免费观看|