首先,在本文開始前,我們先普及一下材質(zhì)的概念,這里推薦材質(zhì),普及材質(zhì)的內(nèi)容都是截取自該網(wǎng)站,我覺得他寫的已經(jīng)夠好了。在開始普及概念前,推薦一首我此刻想到的歌《光---陳?!贰?/p>
在真實世界里,每個物體會對光產(chǎn)生不同的反應(yīng)。鋼看起來比陶瓷花瓶更閃閃發(fā)光,一個木頭箱子不會像鋼箱子一樣對光產(chǎn)生很強的反射。每個物體對鏡面高光也有不同的反應(yīng)。有些物體不會散射(Scatter)很多光卻會反射(Reflect)很多光,結(jié)果看起來就有一個較小的高光點(Highlight),有些物體散射了很多,它們就會產(chǎn)生一個半徑更大的高光。如果我們想要在OpenGL中模擬多種類型的物體,我們必須為每個物體分別定義材質(zhì)(Material)屬性。
我們指定一個物體和一個光的顏色來定義物體的圖像輸出,并使之結(jié)合環(huán)境(Ambient)和鏡面強度(Specular Intensity)元素。當描述物體的時候,我們可以使用3種光照元素:環(huán)境光照(Ambient Lighting)、漫反射光照(Diffuse Lighting)、鏡面光照(Specular Lighting)定義一個材質(zhì)顏色。通過為每個元素指定一個顏色,我們已經(jīng)對物體的顏色輸出有了精密的控制?,F(xiàn)在把一個鏡面高光元素添加到這三個顏色里,這是我們需要的所有材質(zhì)屬性:
struct Material { vec3 ambient; vec3 diffuse; vec3 specular; float shininess; };
以上是對材質(zhì)的一個最簡單概括,我們下面進入Cesium的環(huán)節(jié)。先來看看Cesium在Shader中對Material的定義: