[GLSL] 位移映射 (Displacement Mapping)
原本想用WebGL寫,不過語法不太熟悉,還是選用GLSL來實做Displacement Mapping。
承我剛寫不久的Bump Map,這次要更仔細分析它表現出來的特性,除了bump map的效果之外,我還加了phong shading的diffuse和specular。
Bump Map的概念其實很簡單,在不增加geometry複雜度之下,讓物體表現更立體的樣子。我們需要兩張texture,一個color一個normal,color當然是做顏色,而normal則是表現凹凸(陰影)。做出來的結果並沒有增加model的polygon數,只是在視覺上巧妙地表現陰影(兩張texture合併),使得物體看起來凹凸不平(有著陰影)。
工欲善其事,必先利其器!雖然說可以直接在Visual C++上寫GLSL,但必須先寫OpenGL application,接著設定shader和program,經過建立create、來源source、編譯compile、附著attach、連結link、使用use等步驟,才真正能和vertex shader和fragment shader溝通,詳情可見Setup Example。若想要直接來寫shader,跳過OpenGL application的部份,可以安裝ShaderDesigner。
Texture Mapping Shader需要用到貼圖,OpenGL application可以做到,這次使用GLSL來實做,效果幾乎一模一樣。
這可以算是世界上最簡單的shader程式了,vertex shader和fragment shader只有一行程式碼,很淺顯易懂,Hello World級的GLSL程式碼—Ambient Shader。
HappyMan・迴響