PhiloGL學習(5) 神說要有光,便有了光

2022-01-31 10:46:00 字數 2070 閱讀 1432

光在任何地方都是非常重要的,無論在**都說是要發光發熱,光和熱也是分不開的。光線分為點光源和線光源,所謂點光源和線光源也是個相對的概念,站在地球上我們可以認為太陽光是線光源,其實從更大的尺度來看太陽光也是個點光源,只是我們站在地球上來看光線基本上是平行的了,所以可以認為是線光源。所有問題,站在不同的角度來看就會發生變化。

光線還有另外幾個概念,環境光(ambient light)、漫反射光(diffuse light)、鏡面反射光(specular light)。所謂環境光是指入射光均勻地從周圍環境入射至景物表面並等量地向各個方向反射出去,通常物體表面還會受到從周圍環境來的反射光(地面、天空、牆壁等)的照射,這些統稱為環境光。漫反射光表示特定光源在景物表面的反射光中那些向空間各方向均勻反射出去的光。鏡面反射光為朝一定方向的反射光,如點光源照射乙個金屬球時會在表面形成一塊特定亮的區域,它是光源在金屬球面上產生的鏡面反射光,鏡面反射光與物體的光滑程度有關係。

對於3d也是一樣,我這幾年搞的比較多的是地理資訊系統,那麼為什麼還要學習3d以及之前的大資料等技術呢?首先我對學習充滿了無限熱情,碰到新技術就想學一下,當然這不見得是個好事情,因為乙個人不可能把什麼都學會,必須要有所取捨,否則就會像我一樣導致什麼都略懂但都不精通。其次任何知識都是有用的,不知道哪天就會用到,比如hadoop集群,剛開始感覺很高大上就學了一點,後面果然需要使用這種分布式計算技術來處理遙感影像,於是geotrellis很快就上手了,關於3d我認為也是同樣如此,這個說不定就會在將來的工作中用到,比如傾斜攝影以及點雲等等技術。

騷年們,讓我們開始今天的學習吧。

首先,我們必須清楚,光源是加在整個場景中的而不是某個物件,就像太陽光打到地球上,是整個環境都有了光,而不是說只是某個物件有了光。對待philogl也是一樣,直接從場景中獲取光線設定資訊,並對其進行設定。

所以在onload事件中新增如下**:

var lightconfig = scene.config.lights;

lightconfig.enable = true;

lightconfig就是對整個場景光源設定的變數。首先設定其enbale屬性為true,表示使用光源。上面分析的幾種光源均可以新增或者不新增在特定場景中,並可以任意設定其光源位置及顏色分量等。

設定lightconfig屬性的directional的direction和color屬性。

lightconfig.directional.direction = ;

lightconfig.directional.color = ;

其中direction表示光線方向,color表示光線顏色。

此處需要補充乙個之前早已涉及但被我忽略的問題——座標系。座標系是任何圖形學的基礎,居然遺漏了此問題。

webgl同樣採用笛卡爾左手座標系,其z軸正向為從螢幕指向使用者的方向,x軸正向為從螢幕**指向螢幕右側的方向,y軸正向為從螢幕**指向螢幕上側的方向。

此處light是我定義的變數,儲存了光線的上述資訊,注意此處變數前的+,此符號在js中的意義為將其他型別的資料轉換為number,此處因為可以直接定義成number型別,所以不寫也可。

此處還有乙個問題,經過我實際測試,線光源的x、y、z為反向,即真正光線的向量方向為(-x,-y,-z)。當然此處可能是由於我對座標系理解有誤或者實驗有誤,如果如此,歡迎批評指正。

點光源直接設定lightconfig的points屬性。

lightconfig.points = ,

specular: ,

position:

};

其中diffuse表示散射光,specular表示散射光,position表示點光源的位置,此處位置為實際的光源點的位置。

設定lightconfig的ambient屬性。

lightconfig.ambient = ;
環境光不需要設定位置,無論物體處在何處以及哪一面均會被射上此光。

philogl('test1', ,

direction:

}} },

})

這是線光源的設定方法,可以看出兩種方式寫法實質相同。點光源寫法相同。

神說,該有個計畫

入職第二天。該有個個人發展計畫了。不能一味的每天忙碌卻不知道在忙什麼。這麼說貌似有點太空洞。還是先計畫一下自己最近的看書 工作和生活好了。在校期間買的書,還有很多都沒有看。其中,最重要的是mysql python erlang和nodejs。安卓開發可以在工作中慢慢體會和領悟。現在每天早上九點上班,...

神說,該有個計畫

入職第二天。該有個個人發展計畫了。不能一味的每天忙碌卻不知道在忙什麼。這麼說貌似有點太空洞。還是先計畫一下自己最近的看書 工作和生活好了。在校期間買的書,還有很多都沒有看。其中,最重要的是mysql python erlang和nodejs。安卓開發可以在工作中慢慢體會和領悟。現在每天早上九點上班,...

狂神說 SpringBoot筆記

狂神說springboot01 hello,world!狂神說springboot02 執行原理初探 狂神說springboot03 yaml配置注入 狂神說springboot04 jsr303資料校驗及多環境切換 狂神說springboot05 自動配置原理 狂神說springboot06 自定...