乙個非飛行類遊戲的Camera類

2021-05-23 07:58:11 字數 807 閱讀 1374

一般遊戲都有乙個對攝像機進行移動控制的方法,大型的3d遊戲更是如此,但我看了nehe和一些其他的場景漫遊方法,都是通過旋轉或移動整個場景,這樣的話必然使物體在世界座標系中的座標發生變化,雖然在效果上來講沒什麼影響,但總體給我感覺是控制不太靈活——攝像機總在某一點而只有場景的物體轉動。

基於這些,我自己去寫了個算攝像機位置的camera類,雖然有點屬於捨近求遠的做法,但控制攝像機的位置和朝向比較符合我心意……

嗯,然後說下演算法思路。

雖然沒打算做飛行遊戲的camera類,但還是要引入飛機的3個方向角度來說明演算法,因為沒做適合飛行的,所以並沒有引入滾轉角(roll angle),而是只使用了偏航角(yaw angle)和俯仰角(pitch angle )。

當然,既然引入了個各種角度,那就肯定離不開各種有關三角函式的計算……我們先拋開x,y,z各個軸的限定,看下圖:

設原點座標為(0,0,0),要求線段l的另乙個端點的座標,假設其中乙個座標分量為c軸座標c1,如果我們知道了l的長度和alpha還有beta角的值,c1就可以算出來:俯仰角為beta,l確定後beta值在同高度上都相等,黑色虛線為l的投影,則黑色虛線的長度l1=l×cos(beta)。

由以上的思路,當我們知道具體的移動距離和x,y,z朝向時,就可以把x和z的座標求出來。

y軸的座標因為beta值在同高度上始終不變,所以y=l×sin(beta)。

演算法大概思路就是以上了,當然**會複雜一點,因為控制鏡頭轉向和攝像機移動都不是單純的按照上面的公式,但因為都是基於此思路的,所以能了解此方法的話理解**應該不成問題。

Python中寫乙個桌球類的遊戲

最近開始學python,感覺挺好玩的,既有指令碼語言的靈活性,又有豐富的類庫與物件導向的特點,開發起來很方便。遊戲的規則和桌球一樣,如果妙蛙種子掉地上了就算輸,你可以用藍色的蹺蹺板彈它,使他不落到地面上。game over後可按任意鍵繼續遊戲或選擇退出。如下 import sys,pygame fr...

乙個遊戲框架

最近一段時間不是很忙,就寫了乙個自己的遊戲伺服器框架雛形,很多地方還不夠完善,但是基本上也算是能夠跑起來了。我先從上層結構說起,一直到實現細節吧,想起什麼就寫什麼。第一部分 伺服器邏輯 伺服器這邊簡單的分為三個部分,客戶端的連線首先到達閘道器伺服器,閘道器這裡有個執行緒用來監聽來自與客戶端的連線,然...

python 之 類(乙個類包含乙個類)

1.知識點 1 乙個類可以作為另乙個類的元素。2 當乙個類的屬性為列表新增另乙個類名時,會預設新增另乙個類的 str self 的返回值 箱子 class box 屬性 def init self,b color,b volumn self.color b color self.volumn b v...