小滿(bill man)個人原創,歡迎轉載,轉載請註明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man
本篇開始介紹android 3d的opengl es中的光照基本知識,在android的java開發中,使用gl.glEnable(GL10.GL_LIGHTING)開啟光源,但是,這裡有一點需要指出的是,如果我們只是添加了這句話而不進行其它設定的話,那麼這句話起不到他應有的效果,也就是說我們不會看到光照的效果。相對而言,關閉光源則相對簡單,直接在句子裡加入如下這句就可以了:gl.glDisable(GL10.GL_LIGHTING)。
在opengl情境中包含8個光源,分別是GL_LIGHT0到GL_LIGHT7,它們可以是不同的顏色。和開啟光照一樣,如果只是啟動了某燈之後如果不進行其它設定,同樣達不到開燈的效果。
Opengl es中使用glLightfv的方法來設定光的性質。
首先介紹如何設定定向光線,定向光線就是平行的光源,我們可以認為我們的光照的光線是平行的。就是同過glLightfv設定。此函數有四個參數,第一個參數就是GL_LIGHT0到GL_LIGHT7,第二個參數表明是定向光線,應該設定為GL_POSITION,第三個參數是一個float類的數組,這個數組由四個部分組成,前三個表示光方向的向量,最後一個應該設定為0表示這是個定向光線。最後一個參數表示第一個數值在數組中的位移量
定位光是從某一位置上散射出來的光源,同樣是通過glLightfv來設定。第一個參數就是GL_LIGHT0到GL_LIGHT7。第二個參數參數表明是定位光,和定位光一樣,也使用GL_POSITION,第三個參數是不同的,數組前三個位置是給定座標點和原點之間的向量,最後一個參數定位量設定為1。最後一個參數表示第一個數值在數組中的位移量
設定環境光線的時候,第一個參數還是GL_LIGHT0到GL_LIGHT7。第二個參數,環境光線設定為GL_AMBIENT,第三個參數的數組的四個元素是R,G,B,A四個色彩值,最後一個參數設定為0,表示第一個色彩通道值在數組中的位移量。
設定散射光的時候,第一個參數還是GL_LIGHT0到GL_LIGHT7。第二個參數,環境光線設定為GL_DIFFUSE,第三個參數的數組的四個元素是R,G,B,A四個色彩值,最後一個參數設定為0,表示第一個色彩通道值在數組中的位移量。
鏡面反射光是指光源來自一個特定的方向,並且傾向於從表面向某個特定的方向反射。設定鏡面反射光的時候,第一個參數還是GL_LIGHT0到GL_LIGHT7。第二個參數,環境光線設定為GL_SPECULAR,第三個參數的數組的四個元素是R,G,B,A四個色彩值,最後一個參數設定為0,表示第一個色彩通道值在數組中的位移量
參考自Android 3d 遊戲開發技術詳解與典型案例,如有錯誤之處,希望大家多多指正
下一篇寫一下法向量及材質