首页
/
每日頭條
/
遊戲
/
計算機遊戲制作理解
計算機遊戲制作理解
更新时间:2024-09-09 01:24:56

Andre Lamothe說:“向量幾何是遊戲程序員最好的朋友”。一點不假,向量幾何在遊戲編程中的地位不容忽視,因為在遊戲程序員的眼中,顯示屏幕就是一個坐标系,運動物體的軌迹就是物體在這個坐标系曲線運動結果,而描述這些曲線運動的,就是向量。使用向量可以很好的模拟物理現象以及基本的AI。

首先我們先需要複習一下中學的向量知識

向量v 也叫矢量,是一個有大小有方向的量。

長度為1的向量稱為單位向量,也叫幺矢,這裡即為E

長度為0的向量叫做零向量,記為0,零向量沒有确定方向,換句話說,它的方向是任意的。

計算機遊戲制作理解(向量幾何在遊戲編程中的使用)1

1、向量加法:a b等于使b的始點與a的終點重合時,以a的始點為始點,以b的終點為終點的向量。2、向量減法:a-b等于使b的始點與a的始點重合時,以b的終點為始點,以a的終點為終點的向量。3、 數量乘向量:k*a,k>0時,等于a的長度擴大k倍;k=0時,等于0向量;k<0時,等于a的長度擴大|k|倍然後反向。4、向量的内積(數量積、點積): a.b=|a|*|b|*cosA 等于向量a的長度乘上b的長度再乘上ab之間夾角的餘弦。 它的幾何意義就是a的長度與ba上的投影長度的乘積,或者是b的長度與ab上投影長的乘積,它是一個标量,而且可正可負。因此互相垂直的向量的内積為0。

5、向量的矢積(叉積): a x b = |a|*|b|*sinA*v = c, |a|是a的長度,|b|是b的長度,A是ab之間的不大于180的夾角,v是與a,b所決定的平面垂直的幺矢,即axbab都垂直。在右手坐标系下,a,b,c構成右手系,即右手拇指伸直,其餘四指按由ab的不大于180度的角卷曲,此時拇指所指方向就是c的方向。因此axb!=bxa。如果是左手系,那麼上圖中a x b = -c ,即a,b-c構成左手系。a x b的行列式計算公式如上圖右邊所示。兩個向量的矢積是一個向量。6、正交向量的内積:互相垂直的兩個向量是正交的,正交向量的内積為零。a.b = |a|.|b|*cos(PI/2) = |a|.|b|*0 = 0。

二、向量的性質

沒有下面的這些性質做基礎,我們後面向量技巧的推導将無法進行。

1) a b = b a2) (a b) c = a (b c)3) a 0 = 0 a = a4) a (-a) = 05) k*(l*a) = (k*l)*a = a*(k*l)6) k*(a b) = k*a k*b7) (k l)*a = k*a l*a8) 1*a = a

9) a.b = b.a10)a.(b c) = a.b a.c11)k*(a.b) = (k*a).b = a.(k*b)12)0.a = 013)a.a = |a|^2

三、自由向量的代數(分量)表示

1、向量在直角坐标中的代數表示方法:a=(x,y)

計算機遊戲制作理解(向量幾何在遊戲編程中的使用)2

其中x,y分别是向量在x軸和y軸上的分量。任何一個在直角坐标軸上的分量為(x,y)的向量都相等。比如上圖中的每個向量都表示為(-2,1)。或者寫成a=x*i y*j,ij的線性組合,這裡i是x軸方向的單位向量(1,0),j是y軸方向的單位向量(0,1),因此i正交于j。任意一個2-D向量都可以變成ij的線性組合。|i| = |j| = 1

2、向量的代數(分量)表示的運算:向量加法分量表示:a b=(xa,ya) (xb,yb)=(xa xb,ya yb)向量減法分量表示:a-b=(xa,ya)-(xb,yb)=(xa-xb,ya-yb)向量的内積(數量積、點積)分量表示:a.b=(xa * i ya * j).(xb * i yb * j)= xa * i * xb * i xa * i * yb * j ya * j * xb * i ya * j * yb * j=(xa * xb) * (i * i) (xa * yb) * (i * j) (xb * ya) * (i * j) (ya * yb) * (j * j)= xa * xb ya * yb

3、向量長度(模)的計算以及單位化(歸一化):設a=(x,y),則|a| = |(x,y)| = |x*i y*j| = sqrt(x^2*i^2 y^2*j^2) = sqrt(x^2 y^2),這裡sqrt是開平方符号。a的單位向量為a/|a|,即(x,y)/sqrt(x^2 y^2)。

現在假設你正在編寫一個飛行射擊遊戲,你的敵人需要一種很厲害的武器-跟蹤導彈,這種武器在行進的同時不斷的修正自己與目标之間的位置關系,使得指向的方向總是玩家,而不論玩家的位置在哪裡,這對一個水平不高的玩家(我?)來說可能将是滅頂之災,玩家可能很詫異敵人會擁有這麼先進的秘密武器,但對于你來說隻需要在程序循環中加入幾行代碼,它們的原理是向量的單位化和基本向量運算。

首先我們要知道玩家的位置(x_player, y_player),然後,我們的導彈就可以通過計算得到一個有初始方向的速度,速度的方向根據玩家的位置不斷修正,它的實質是一個向量減法的計算過程。速度的大小我們自己來設置,它可快可慢,視遊戲難易度而定,它的實質就是向量單位化和數乘向量的過程。具體算法是:導彈的更新速度(vx_missile, vy_missile) = 玩家的位置(x_player, y_player) - 導彈的位置(x_missile, y_missile),然後再對(vx_missile, vy_missile)做縮小處理,導彈移動,判斷是否追到玩家,重新更新速度,縮小...

看一下這個簡單算法的代碼:

計算機遊戲制作理解(向量幾何在遊戲編程中的使用)3

// 假設x_player,y_player是玩家位置分量// x_missile,y_missile是導彈位置分量// xv_missile,yv_missile是導彈的速度分量// 讓我們開始吧!float n_missile ; // 這是玩家位置與導彈位置之間向量的長度float v_rate ; // 這是導彈的速率縮放比率// 計算一下玩家與導彈之間的位置向量xv_missile = x_player-x_missile ; // 向量減法,方向由導彈指向玩家,x分量yv_missile = y_player-y_missile ; // y分量// 計算一下它的長度n_missile = sqrt( xv_missile*xv_missile yv_missile*yv_missile ) ;// 歸一化導彈的速度向量:xv_missile /= n_missile ;yv_missile /= n_missile ;// 此時導彈的速率為1,注意這裡用速率。// 導彈的速度分量滿足xv_missile^2 yv_missile^2=1// 好!現在導彈的速度方向已經被修正,它指向玩家。// 由于現在的導彈速度太快,為了緩解一下緊張的氣氛,我要給導彈減速v_rate = 0.2f ; // 減速比率xv_missile *= v_rate ; // 這裡的速率縮放比率,你可以任意調整大小yv_missile *= v_rate ; // 可以加速:v_rate大于1;減速v_rate大于0小于1,這裡就這麼做!// 導彈行進!導彈勇敢的沖向玩家!x_missile = xv_missile ;y_missile = yv_missile ;// 然後判斷是否攻擊成功現在,你編寫的敵人可以用跟蹤導彈攻擊玩家了。你也可以稍加修改,變為直線攻擊武器。這樣比較普遍。基本的跟蹤效果用向量可以很好的模拟。此時,我們隻用到了所述向量知識的很少的一部分。其他的知識會慢慢用到遊戲中。這次先介紹到這裡。

在遊戲的運動中我們常用的方法就是向量的加減,這個可以大大簡化我們的程序。對于向量你還有什麼需要了解的嗎?歡迎 關注,私信.

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
王者榮耀新版本宮本武藏怎麼玩(王者榮耀無所畏懼)
王者榮耀新版本宮本武藏怎麼玩(王者榮耀無所畏懼)
  宮本武藏是一名個人能力超強的戰士英雄,他的一技能可以擊落飛行物,是敵軍遠程消耗技能的最大克星,同時大招超強的控制能力和爆發力也讓他成為一名合格的後排終結者,無論是走打野位還是上單位他都能完美的勝任。但宮本武藏在現版本中的處境有些尴尬,尤其是對後排英雄的統治力大不如前,連切入都十分困難,更别提收割了;不過宮本武藏一技能的冷卻時間較短是很大的優勢,這讓他在團...
2024-09-09
dota是個人遊戲還是組隊遊戲(DOTA不隻是一款遊戲)
dota是個人遊戲還是組隊遊戲(DOTA不隻是一款遊戲)
     也許有人會看到我這篇日志,也許還有人不知道什麼是DOTA。那麼首先我先介紹一下DOTA。DOTA是一款由IceFrog開發的基于魔獸争霸3冰封王座的多人實戰對戰的自定義地圖。可以支持10人(12人)對戰的同時連線遊戲。DOTA就是Defense of the Ancients的縮寫。DOTA不隻是一款遊戲!   我們大一開始接觸DOTA,可以說DO...
2024-09-09
pwc的遊戲測評有分數要求嗎(遊戲業界風雲錄)
pwc的遊戲測評有分數要求嗎(遊戲業界風雲錄)
  株式會社LEVEL-5成立于1998年,組建者日野晃博曾經在許多知名遊戲公司擔任程序設計員,但是他的部下多數還是沒有什麼遊戲制作經驗的畢業生。創業之初的LEVEL-5僅有12人,開會的時候需要租用300日元一小時的會議室。在PS時代,LEVEL-5的工作主要是為一些大公司代工編寫程序,所以當時這個"小組"級的公司的名聲隻在業界一些人士中有所耳聞。然而在進...
2024-09-09
王者榮耀老夫子出裝和思路教學(王者榮耀老夫子新手教學)
王者榮耀老夫子出裝和思路教學(王者榮耀老夫子新手教學)
  在大陸,即使三歲小兒,也能斬釘截鐵告訴你:世間最強的人,是老夫子。這既是傳說,也是一種堅定不移的信仰。夫子的實力有多高?大概就像冰封的雪山,高聳入雲的通天塔以及九重之天那樣望不到巅峰。   【出裝推薦】   抵抗之靴 末世 暴烈之甲 破甲弓 破軍 賢者的庇護。      抵抗之靴最主要是減少被控制時間,對于戰士類英雄來說,減免控制時間是非常重要的,抵抗之...
2024-09-09
字節跳動遊戲産業彎道超車(字節跳動秘密成立)
字節跳動遊戲産業彎道超車(字節跳動秘密成立)
  字節跳動成立了一個百人團隊,挖了一些牛人,開始了以自研遊戲為主的Oasis項目(綠洲計劃),在内部這個項目也被稱為“憋大招”與此前該公司開展的小遊戲和休閑遊戲不同,“綠洲計劃”主要針對的是重度遊戲的開發字節跳動目前遊戲分為三塊業務,分屬三個不同的部門:小遊戲歸産品部門;休閑遊戲歸商業化部門;自研遊戲歸戰略部門;獨家代理業務此前也歸屬戰略部門,現計劃化歸商...
2024-09-09
Copyright 2023-2024 - www.tftnews.com All Rights Reserved