【OpenGL】光照太陽系

一、要求

二、思路

0、效果圖

1、實現基本的太陽系

採用局部變換的思路完成,實現太陽、地球、月亮及軌道的繪製

2、宇宙中加入一盞泛光(方向光)

加入思路:

  1)設置好物體的法向

  在這裏可以不進行設置,因爲在OpenGL是一個狀態機中,如果不進行設置,則使用默認值

  2)打開光照

  3)設置光照參數

  注意其實光照參數可以設置在打開光照之前,因爲OpenGL是一個狀態機,另外對於方向光需要注意,其位置向量w設置應設爲0.0

  4)材質參數

  設置光照下物體的顏色

glEnable(GL_COLOR_MATERIAL);

  glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT);

3、設置自發光

  glMaterialfv(GL_FRONT, GL_EMISSION, vEmission);//太陽自發光

  glutSolidSphere(sunR, 100, 100); //畫太陽

  glMaterialfv(GL_FRONT, GL_EMISSION, vEmission2);//改變材質參數,使之後的物體不自發光

  注意在畫太陽之前,設置vEmission爲自己想要其發光的顏色值,設置完後,再將vEmission2設置回默認值,則後面物體就不回自發光

4、加入一艘飛碟,飛碟沿橢圓軌道繞地球運行

此處用球體代表飛碟,要使飛碟繞橢圓軌道飛行,則要設定一個橢圓方程,使得飛碟始終可以繞以地球爲座標中心的點,在xoz平面上進行旋轉,參考橢圓方程中x,y的求解極座標方法,可假設以下變量:

GLfloat a = 1.0f;//橢圓長半軸

GLfloat b = 0.35f;//橢圓短半軸

GLfloat t = 0.0f;//衛星旋轉角度

GLfloat sateX = a * cos(t * pi); //衛星x

GLfloat sateZ = b * sin(t * pi); //衛星z

要改變衛星的x,z,則在定時器回調函數中,不斷的增加衛星旋轉角度t

5、使飛碟上有一個spot light(點光源)始終照耀地球

要達到這個效果,就是把點光源的座標設置爲衛星的座標,而光源的方向,即從衛星射向地球。此處有一個難點是點光源的座標和光源方向設置語句在何處執行,我在剛開始實現的時候,一直以爲在display()函數開始部分中的光源參數設置那塊放此語句即可,但是沒有效果,開始我一度以爲我自己寫的代碼沒有設置出點光源,於是我參考他人點光源的demo,發現自己並沒錯,於是我更改點光源的位置爲固定值,檢測是否我設定出了點光源,經過測試,我發現設置語句並沒有錯,但是爲什麼我沒有設置出點光源呢?我思考點光源的位置可能不對,雖然我設置的座標值爲衛星的x,衛星的z,但實際上由於我的語句寫在開頭,其x,z所在座標系,還是沒有發生很多幾何變換的座標系,因此我的x,z值設置不正確,於是我將其放入在生成衛星代碼模塊,功能才得以實現,不得不說,OpenGL中的坑,實在是太多了。

三、遇到的問題與思考

1、光照計算各種參數的設置的問題

在設置光照計算的各函數的參數時,剛開始感覺難度很大,因爲有些函數的參數,採用的是指針(以PPT上給出的),並不是枚舉類型,故對值設置爲幾個,數值的含義摸不清,因此剛開始就經常baidu查它們參數如何設置,這是一個難點。

 

2、設置自發光遇到的問題

開始設置自發光問題時,會發現明明只想設置太陽的自發光,但是其他物體也會發生自發光,這如何解決呢?對於這個問題,我想既然OpenGL是狀態機,如果不設置則用其默認值,因此我在設置完太陽的自發光後,將其設回默認值就好了。。

3、軌道會受光照的影響

顯然,軌道不應該受光照的影響,但它卻被光照所影響,因此如何才能使光照不作用於不需要的物體呢?在不需要受光照的物體前加入

glDisable(GL_LIGHTING);在繪製完該物體之後,加入glEnable(GL_LIGHTING);打開光照即可

4、點光源的設置

如功能5所述,在此強調的是對於初次接觸光源的小白來說,這塊的設置一定要考慮到幾何變換後的座標系。

 

四、參考資料

 

1、已知橢圓方程,怎麼求取對應的X,Y座標

https://zhidao.baidu.com/question/331764546446076605.html

2、OpenGL中創建聚光燈的效果https://blog.csdn.net/Haohan_Meng/article/details/42245799?utm_source=blogxgwz2

3、OpenGL聚光燈光照沒有出現的問題

https://bbs.csdn.net/topics/320118089

 

五、源代碼

CSDN下載鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章