日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GLSL实现HDR Rendering 【转】

發布時間:2024/9/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GLSL实现HDR Rendering 【转】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/a3070173/archive/2008/11/29/3408573.aspx

?

  • HDR?-?全稱High?dynamic?rang,是目前流行的3D特效技術.其基本原理是:雖然在計算機圖形中可以使用完全的浮點型來表
  • 示顏色,但之前由于一直受到硬件的限制,從外部載入的紋理格式大多只能以每種顏色成分用一個字節來表示,也就是0-255,
  • 當這個低范圍的顏色值轉換為浮點型之后就會導致一定量的顏色間隔,而HDR技術通過采用浮點型的外部紋理格式彌補了原來
  • 整型紋理格式所導致的顏色間隔,從而增強了計算機圖形的顏色表現能力.當然這只是籠統的說法,而且每個人對同一個概念
  • 的理解也不盡相同,所以我在本文的最后列出了一些個人認為比較有用的參考資料,這里只簡單描述一下我的HDR?-?OpenGL實
  • 現,其實HDR的理念理解了之后就會比較簡單,但真要編碼實現的話還是有很多東西需要琢磨.
  • 下面列出的是主要渲染流程:
  • 備注(FBO代表Frame?Buffer?Object)
  • 1.渲染整個場景到FBO1
  • 2.下采樣FBO1到尺寸為原來1/4的FBO2中
  • 3.下采樣FBO2到尺寸為原來1/8的FBO3中
  • DownSample片元著色器:
  • uniform?sampler2D?g_SceneTexture;
  • void?main()
  • {
  • ????gl_FragColor?=?texture2D(g_SceneTexture,?gl_TexCoord[0].st);
  • }
  • 4.對經過兩次下采樣并保存在FBO3中的內容進行高斯過濾,并將處理過后的圖像
  • ??保存在FBO4中(備注:高斯過濾分為橫向過濾和縱向過濾兩個通道,所以需要一個FBO5進行過渡)
  • 高斯過濾片元著色器:
  • const?int?g_iWeightNumber?=?17;
  • ????????????????????????????????????
  • uniform?sampler2D?g_DecalTexture;
  • uniform?bool?g_bFilterModel;
  • uniform?float?g_aryWeight[g_iWeightNumber];?//?Blur權重數組
  • uniform?vec2?g_aryVerticalOffset[g_iWeightNumber];??//?橫向Blur偏移數組
  • uniform?vec2?g_aryHorizontalOffset[g_iWeightNumber];????//?縱向Blur偏移數組
  • void?main()
  • {
  • ????vec4?vec4Sum?=?vec4(0.0);
  • ????if?(g_bFilterModel)
  • ????{
  • ????????//?橫向過濾
  • ????????for(int?i?=?0;?i?<?g_iWeightNumber;?++i)
  • ????????{
  • ????????????vec4Sum?+=?texture2D(g_DecalTexture,?gl_TexCoord[0].st?+?g_aryVerticalOffset[i])*g_aryWeight[i];
  • ????????}
  • ????}
  • ????else
  • ????{???
  • ????????//?縱向過濾
  • ????????for(int?i?=?0;?i?<?g_iWeightNumber;?++i)
  • ????????{
  • ????????????vec4Sum?+=?texture2D(g_DecalTexture,?gl_TexCoord[0].st?+?g_aryHorizontalOffset[i])*g_aryWeight[i];
  • ????????}
  • ????}
  • ????gl_FragColor?=?vec4Sum;
  • }
  • 5.FBO4中的內容與FBO1中的內容進行特效處理和ToneMapping以將高動態范圍的顏色值映射對低動態范圍以便于顯示.
  • ToneMapping片元著色器:
  • const?float?g_fGamma?=?1.0/2.0;
  • uniform?float?g_fBlurAmount;????//?模糊量
  • uniform?float?g_fRadialEffectAmount;????//?放射式效果量
  • uniform?float?g_fExposure;??//?暴光量
  • uniform?sampler2D?g_SceneTexture;
  • uniform?sampler2D?g_BlurTexture;
  • //?計算放射式效果
  • vec4?CaculateRadial(vec2?p_vec2TexCoord,int?p_iSampleNumber,
  • ??????????????float?p_fStartScale?=?1.0,?float?p_fScaleMul?=?0.9)
  • {
  • ????//?臨時變量
  • ????vec4?vec4TempColor?=?vec4(0.0);
  • ????float?fCurrentScale?=?p_fStartScale;
  • ????vec2?vec2TempTexCoord?=?vec2(0.0);
  • ????
  • ????//?遍歷采樣
  • ????for(int?i?=?0;?i?<?p_iSampleNumber;?++i)?
  • ????{
  • ????????vec2TempTexCoord?=?(p_vec2TexCoord?-?0.5)*fCurrentScale?+?0.5;??//?采樣方式
  • ????????vec4TempColor?+=?texture2D(g_BlurTexture,?vec2TempTexCoord);
  • ????????fCurrentScale?*=?p_fScaleMul;
  • ????}
  • ????vec4TempColor?/=?float(p_iSampleNumber);
  • ????return?vec4TempColor;
  • }
  • //?計算小插圖效果
  • float?CaculateVignette(vec2?p_vec2Position,?float?p_fInner,?float?p_fOuter)
  • {
  • ????float?L?=?length(p_vec2Position);
  • ????return?(?1.0?-?smoothstep(p_fInner,?p_fOuter,?L)?);
  • }
  • void?main()
  • {
  • ????vec4?vec4SceneColor?=?texture2D(g_SceneTexture,?gl_TexCoord[0].st);?????//?計算原始場景顏色
  • ????vec4?vec4BlurColor?=?texture2D(g_BlurTexture,?gl_TexCoord[0].st);???????//?計算經Blur后的場景顏色
  • ????vec4?vec4RadialEffectColor?=?CaculateRadial(gl_TexCoord[0].st,?30,?1.0,?0.95);??//?計算放射效果的顏色
  • ????
  • ????//?混合場景與Blur
  • ????vec4?vec4Temp?=?lerp(vec4SceneColor,?vec4BlurColor,?g_fBlurAmount);
  • ????//?添加放射性效果
  • ????vec4Temp?+=?vec4RadialEffectColor*g_fRadialEffectAmount;
  • ????//?進行暴光
  • ????vec4Temp?*=?g_fExposure;
  • ????//?添加圓形擴散小插圖效果使得中間部分較亮而四個邊角逐漸變暗
  • ????vec4Temp?*=?CaculateVignette(gl_TexCoord[0].st*2.0?-?1.0,?0.7,?1.5);
  • ????//?使用Gamma校正規范會低范圍光照
  • ????vec4Temp.rgb?=?pow(vec4Temp.rgb,?vec3(g_fGamma));
  • ????//?最終顏色
  • ????gl_FragColor?=?vec4Temp;
  • }
  • Demo效果截圖:
  • exe文件:http://www.fileupyours.com/view/219112/GLSL/HDR%20Rendering.rar
  • VC9運行庫:http://www.fileupyours.com/view/219112/GLSL/VC9RunningLib.rar
  • 參考資料:1.DirectX?SDK?Sample?-?HDRLighting(備注:這個可以從DirectX?SDK中獲得)
  • ?????????2.Nvidia?SDK?10.5?- HDR(備注:Nvidia SDK可以在Nvidia的網站上免費下載)
  • 總結

    以上是生活随笔為你收集整理的GLSL实现HDR Rendering 【转】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲小视频网站 | 色婷婷综合久久久中文字幕 | 欧美日韩激情视频在线观看 | 色婷婷综合久久久久中文字幕 | 国产欧美一区二区精品性色超碰 | 色鬼综合 | 韩国一区二区三区视频 | 99热国| 国产日本欧美在线 | 亚洲天堂成人在线 | 悠悠色综合网 | 不卡一区二区在线观看 | 日韩一区二区三区精 | 久久久1 | 一级片在线观看免费 | 国产乱人对白 | 欧美一区二区在线免费观看 | 成人免费一级 | 巨物撞击尤物少妇呻吟 | 亚洲性事| 日本久久久久久 | 午夜影院私人 | 久久深夜视频 | 丰满人妻一区二区三区53号 | 亚洲一二三四 | 天天干视频在线 | 久久久久久久久一区 | 爱爱精品视频 | 西比尔在线观看完整视频高清 | 91视频看| 亚洲天堂av在线免费观看 | 影音先锋男人站 | 成人性爱视频在线观看 | 九九九九九伊人 | 欧美大片a| 91av一区二区三区 | 红桃视频91| 亚洲高潮 | 午夜免费小视频 | 国产美女免费网站 | v8888av| 欧洲一区二区三区在线 | 色视频一区 | 又粗又大又硬毛片免费看 | 成年人免费大片 | 成人免费网站 | 午夜影院在线观看免费 | 极品91尤物被啪到呻吟喷水 | 长篇h版少妇沉沦交换 | 亚洲欧美日韩国产精品 | 日本不卡视频在线播放 | 秋霞黄色片 | 久久久久久无码精品大片 | 国产最新自拍 | 91看片就是不一样 | 国产精品久久久久久久成人午夜 | 色播欧美 | 国产精品久久久久久久久久免费看 | 99成人在线观看 | 欧美日本 | 日韩精品在线观看网站 | 亚洲av片不卡无码久久 | 色吧在线观看 | √资源天堂中文在线 | 亚洲综合图片一区 | 亚洲精品91天天久久人人 | 精品一区二区免费 | 亚洲天堂第一区 | 久久亚洲精品中文字幕 | www.色播.com| 亚洲91精品 | 久久久久久中文字幕 | 亚洲天堂一区在线观看 | 骑骑上司妻电影 | 国产一区二区视频免费观看 | 黑丝国产一区 | 捆绑调教视频网站 | 久久久性色精品国产免费观看 | 好屌妞视频这里只有精品 | 人人九九精 | 九九视频免费观看 | 在线观看免费日韩av | 免费日韩视频 | 亚洲成年网 | 免费高清视频在线观看 | 丁香婷婷综合激情五月色 | 天狂传说之巴啦啦小魔仙 | 国产视频最新 | 欧美一级淫片007 | 麻豆视频一区二区三区 | 一级片观看 | 激情五月激情综合网 | 粉嫩aⅴ一区二区三区四区五区 | 久久国语 | 一级片视频免费观看 | 夜夜嗨av一区二区三区免费区 | 欧美交换配乱吟粗大25p | 日日夜夜拍 | 九色蝌蚪9l视频蝌蚪9l视频 |