【OpenGL】三維場景漫遊的實現

功能

  • 構建一個三維場景
    可利用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()函數設定照相機的位置,可以任意指定照相機的位置和朝向。

源代碼

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