當前位置:
首頁 > 最新 > 移動的攝像機

移動的攝像機

你們吼~最近工作學習忙么,一定要學會適當的放鬆和運動,努力是必須的,但也要注意身體和生活噢~

首先

這次來扯一扯攝像機的移動吧~

說到攝像機的移動你會想到什麼呢,之前說過的mvp矩陣,分別代表了物體,相機和降維,所以自然我們下手的地方是view矩陣,這裡面有兩個要說的地方,一個是時間,也就是我要移動相機的話該多長時間移動多少距離,另一個是我要怎麼去檢測輸入的比如鍵盤或者手指來控制移動的方向

時間

我用過的unity引擎和cocos引擎,以及opengl的庫都可以得到每一幀運行了多長時間,我們可以利用這個時間差來更新相機的屬性,也可以在這個的基礎上封裝一個定時器,每隔一段時間去運行你想要的方法,這個方法,也可以叫做回調,馬上來說

回調

回調函數在許多的地方都可以看見,也可以是事件,它們都是把函數作為參數傳遞的行為。比如利用 registerEvent(ID.event1, func) 我們將傳入一個方法,如果這個事件被觸發了,比如可以這樣 pushEvent(ID.event1) 然後就會去調用之前傳入的 func ,這裡面做了什麼呢,不過是在 registerEvent 的時候利用一個泛型容器(不知道的可以先去了解一下)存儲這個 ID 和 對應的 func,當 pushEvent 的時候就去遍歷這個容器找到屬於 ID.event1 的func 然後去調用它

按鍵觸發和觸摸事件

從底層來說,檢測按鍵和觸摸的基本都是通過硬體的定時器掃描,然後去調用方法,手機和電腦這時候就會被觸發按鍵和觸摸方法的回調方法,當然你必須註冊,不然它怎麼知道去調用誰呢對不對?事件的傳遞就不多說了

攝像機移動

我們已經可以讓設備檢測到我們的按鍵和觸摸了,這時候就要讓這個輸入產生影響了,之前就說了,相機的位置和角度信息是跟 View 矩陣有關的,還記它的一些參數嘛, view 傳入的三個信息是:

相機的位置

目標的位置

世界坐標的 Y 向量

相機的位移:相機位移上面三個覺得跟哪個屬性有關~ 肯定是相機的位置對吧,我們就可以通過改變向矩陣中輸入的相機位置來改變,這就很容易了,動手試試看吧~ 移動的速度可以慢慢調整到自己喜歡的大小~

相機的角度:相機角度肯定是跟目標的位置有關了喲,因為是以相機為中心,相機左右轉動,實際上可以轉變為物體的移動,然後到底要怎麼轉化呢?

話說這圖,很明白了吧,將相機上下擺動和左右擺動的角度轉化為 x , y , z 的值

glm::vec3 front;

front.x =cos(glm::radians(yaw)) *cos(glm::radians(pitch));

front.y =sin(glm::radians(pitch));

front.z =sin(glm::radians(yaw)) *cos(glm::radians(pitch));

cameraFront = glm::normalize(front);

這裡的 yaw 和 pitch 角度也是需要每一幀時間增加一些,讓移動更加的平滑

最後

今天我想多說一些啦~

我認為寫代碼最好的方式是先有一個思路,然後照著思路寫下去,這樣不僅對自己的代碼有一個比較好的掌控能力,也比在別人代碼的基礎上改動更為的自由。雖然我也是個菜鳥,這也算是我的一些經驗,如果有用的話希望大家可以收穫到一些,如果說的不對的地方希望大家可以指出來

有趣的人兒喲,來關注哦~

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 公眾號 的精彩文章:

那些不甘於做背景的電影原聲(上)
中醫之法在於理通自然
那點悅己的事兒
不斷消耗你的男人,不分手留著過年嗎?
西北旅行——美食篇

TAG:公眾號 |