功能
- 構建一個三維場景
可利用glut提供的各種簡單形體來搭建,或者讀入別的模型,並加入光照效果 - 用鍵盤操作一個物體(如一艘飛船,或一個機器人),在三維場景中漫遊
視點可以放在物體上,或跟隨物體,利用gluLookAt()函數來實現對視點的控制
思路
1、開始想直接利用OpenGL的glulookAt函數,但發現並不好用
2、之後參考他人資料尋思構造一個攝像機類,通過攝像機類達到控制視點,這部分通過參考LearnOpenGL上的攝像機類進行實現
實驗結果
實驗效果圖
程序控制鍵說明
- w,s,a,d分別控制視點的前進,後推,左移,右移
- q,e控制視點進行左旋轉,右旋轉
- 方向鍵LEFT、RIGHT、UP、DOWN,視線方向轉向左,視線方向轉向右,視線方向轉向上,視線方向轉向下
- Page_UP、Page_Down,視點位置升高,降低
實驗思考
glulookAt()
一般gluLookAt()用於從世界座標系到眼座標系的轉換,但是由於OpenGL裏面模型視圖矩陣直接將本地座標系轉換爲眼座標系,所以gluLookAt()應該被用來設置模型視圖矩陣,但是有一點得注意了:
gluLookAt()的調用應該在場景繪製初glLoadIdentity()函數調用之後,在所有的glTranslate*()、glRotate*()、glScale*()函數調用之前調用,且只調用一次
參考自以下資料
https://bbs.csdn.net/topics/390124968
https://blog.csdn.net/fyyyr/article/details/79298636
參考資料
首先是是場景漫遊:實現場景漫遊有兩種方式,一種是固定照相機的位置,對整個場景進行變換,例如當人物前進時,其實是通過將整個場景向後平移實現的,轉向時,是通過反向旋轉整個場景實現的;另一種方式是使照相機在場景中移動,通過gluLookAt()函數設定照相機的位置,可以任意指定照相機的位置和朝向。