GLSL實現簡單硬體Anisotrop Lighting 【轉】

來源:互聯網
上載者:User

標籤:blog   http   ext   color   com   檔案   

http://blog.csdn.net/a3070173/archive/2008/11/13/3294660.aspx

 

各向異性光照往往用於處理一些具有各向異性表面的物體,如:光碟片的盤面.為避免在程式
即時進行各向異性計算的高消耗,現可將表面的各向異性離線編製成一個紋理,這樣就只
需要在著色器中對它進行查詢就可以了.

具體的實現方法是:根據表面法向量N,光向量L和視向量V分別計算頂點紋理座標,並在片元著色
器將差值後的結果進行紋理尋找.
gl_TexCoord[0].s = max(dot(L, N), 0.0);
gl_TexCoord[0].t = 1.0 - max(dot(H, N), 0.0);   // 處理紋理倒置
備忘:此處的H為半形向量

具體著色器代碼:
頂點著色器:
uniform vec3 g_vec3LightPositionInWorld;
uniform vec3 g_vec3CameraPositionInWorld;
void main()
{
 vec3 P = vec3(gl_Vertex);
 vec3 N = gl_Normal;
 
 vec3 L = normalize(g_vec3LightPositionInWorld - P);
 vec3 V = normalize(g_vec3CameraPositionInWorld - P);
 vec3 H = normalize(L + V);
 
 gl_TexCoord[0].s = max(dot(L, N), 0.0);
 gl_TexCoord[0].t = 1.0 - max(dot(H, N), 0.0); // 處理紋理倒置
 
    gl_Position = ftransform();
}
片元著色器:
uniform sampler2D g_AnisotropTexture;
void main()
{
    vec4 vec4DecalColor = texture2D(g_AnisotropTexture, gl_TexCoord[0].st);
    gl_FragColor = vec4(vec4DecalColor.rgb*vec4DecalColor.aaa*4.0, 1.0);
}

Demo:

 


 
exe檔案:http://www.fileupyours.com/view/219112/GLSL/Anisotrop%20Lighting%20Demo.rar

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.