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