【Visual C++】游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟
本系列文章由zhmxy555(毛星云)編寫,轉載請注明出處。
http://blog.csdn.net/zhmxy555/article/details/7555785
作者:毛星云??? 郵箱: happylifemxy@qq.com??? 期待著與志同道合的朋友們相互交流
本節內容主要介紹摩擦力系統的模擬,順帶著介紹了暴雪的神級作品《暗黑破壞神3》。
?
?
一.基礎知識講解
摩擦力是兩個表面接觸的物體相互運動時互相施加的一種物理力。廣義地物體在液體和氣體中運動時也受到摩擦力。摩擦力可謂無處不在,為了模擬出與現實生活相符的游戲場景,游戲或者游戲引擎中,用相關代碼實現摩擦力的真實效果是十分必要的。
任何一款完善的物理引擎,都有模擬摩擦力系統的相關代碼。如大名鼎鼎的havok物理引擎(暗黑破壞神3所采用的物理引擎),也如最近在移動平臺上很熱門的Box2d物理引擎。
上一節范例中并沒有考慮小鳥下墜與彈跳時的摩擦力影響效果,這節筆記里面我們將其考慮其中,加入了使小鳥運動速度減慢的負向加速度,但忽略小鳥與空氣之間的阻力。下面看看如何實現這樣一個比較符合真實狀況的小鳥下落與彈跳效果:
int x=0,y=100,vx=10,vy=0;//初始橫坐標x=0,初始縱坐標y=100,初始水平方向速度vx=10,初始豎直方向速度vy=0) int gy=2,fx=-1,fy=-4; //重力加速度gy=2,x方向摩擦力為-1,f方向摩擦力為-4 x += vx; //計算X軸方向貼圖坐標,每調用一次MyPiant(),x坐標就加上一個vx的當前值 vy = vy + gy; //計算Y軸方向速度分量,vy隨著每一次MyPiant()函數的調用就加上一個gy(重力加速度) y += vy; //計算Y軸方向貼圖坐標,每調用一次MyPiant(),y坐標就加上一個剛改變過后的vy,相當于加速運動 if(y >= rect.bottom-70) //判斷是否觸地,如果觸碰到窗口邊界,進行調整 { y = rect.bottom - 70; //X軸方向的摩擦力處理 vx += fx; // vx=fx+vx;這里fx為負值,所以每調用一次MyPiant(),vx恒定減小一個fx if(vx < 0) //當vx值遞減到小于0時,就將其設為0,即小球在X方向不再移動。 vx = 0; //Y軸方向摩擦力處理 vy += fy; //vy=fy+vy;這里fy同樣為負值,所以每調用一次MyPiant(),vy恒定減小一個fy if(vy < 0) //若速度減到小于等于0,置為零,即小球在Y方向不再移動。 vy = 0; vy = -vy;
這段代碼里面小鳥由高出下落觸及地面進行反彈,且存在落地時的摩擦力,使得小鳥在落地彈跳后速度減慢,最后呈現靜止的狀態,停在窗口邊緣。
二.神級游戲作品《暗黑破壞神Ⅲ》的介紹
既然已經提到了這款革命性的作品,我們就來介紹一下,即將在2012年5月15日全球上市的神級作品——《暗黑破壞神Ⅲ》
(DIABLO Ⅲ)(淺墨習慣稱作大菠蘿3,呵呵)。
當然《暗黑破壞神Ⅲ》是由我們無所不能的C++來開發的~
淺墨在這里不打算花大篇幅介紹,就簡明扼要地提一下吧。
先貼一張暗黑破壞神Ⅲ的封面美圖:
暗黑Ⅲ用C++編程語言開發(C++由于其執行的高效性,一直是中大型游戲開發的統治性編程語言),采用暴雪自家定制的
3D圖形引擎,物理引擎采用Havok,于PC和Mac兩個平臺發售,并暫時不會登陸XBOX 360及PlayStation等家用機平臺。
《暗黑破壞神3》對于DirectX 11進行了特殊的優化和加速,官方推薦使用Windows Vista或者Windows?7來進行游戲以便獲
得更好的體驗效果。
正所謂“暴雪出品,必屬精品”,昨天淺墨偶爾看了下暗黑3五種職業的技能介紹視頻,看完后熱血沸騰,暴雪真的是沒有辜
負廣大暗黑粉絲這么多年的等待,用心做出了這么一款任何溢美之詞都無法形容其精美的天賜之作。
?
暗黑Ⅲ有諸多新的亮點,讓暗黑系列的動作角色扮演游戲體驗達到一個新的高度,淺墨在這里列一些出來:
★五種強大的職業可供選擇,包括野蠻人、巫醫、法師、武僧以及惡魔獵手
★全新3D圖像引擎將帶來無與倫比的視覺效果,Havok物理引擎技術
★ Sanctuary世界變幻莫測的室內外場景
★極具互動性的游戲環境,危險的陷阱與障礙,可被破壞的元素
★隨機產生的事件與場景,帶來無止境的動態游戲體驗
★種類繁多的具有獨特***方式和習性的惡魔與怪物
★全新任務系統加上角色定制選項,帶來終極動作RPG體驗
★可通過BN進行多人聯網合作或對戰
這張圖是其中四種職業的合照(原本五職業),目測少了“惡魔獵手”這一帥氣的職業:
更多內容去請大家前去http://d3.uuu9.com/欣賞,淺墨在這里就不贅言了。
3.詳細注釋的源代碼欣賞
好了回到我們的主題摩擦力吧,為了演示的方便直觀,我們選擇將筆記二十源碼的一些內容進行更改,在其基礎上模擬實現出摩擦力系統的效果。
依舊是國際慣例,貼出詳細注釋的源代碼:
轉載于:https://blog.51cto.com/8241237/1348012
總結
以上是生活随笔為你收集整理的【Visual C++】游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#泛型-泛型集合DictionaryK
- 下一篇: Linq中的Where与SkipWhil